java多线程消息队列_java多线程消息队列的实现
1、定义一个队列缓存池:
private static List queueCache = new LinkedList();
2、定义队列缓冲池最大消息数,如果达到该值,那么队列检入将等待检出低于该值时继续进行。
private Integer offerMaxQueue = 2000;
3、定义检出线程,如果队列缓冲池没有消息,那么检出线程会线程等待中
new Thread(){
public void run(){
while(true){
String ip = null;
try {
synchronized (queueCache) {
Integer size = queueCache.size();
if(size==0){
//队列缓存池没有消息,等待。。。。queueCache.wait();
}
Queue queue = queueCache.remove(0);
if(isIpLock(queueStr)){//假若这个是一个多应用的分布式系统,那么这个判断应该是分布式锁,这里说的锁不是线程停止,而是跳过该消息,滞后处理
queueCache.add(queue);该queue重新加入队列缓冲池,滞后处理,
continue;
}else{
;//这里是处理该消息的操作。
}
size = queueCache.size();
if(size=0){queueCache.notifyAll();//在队列缓存池不超过最大值的前提下,假若检入正在等待中,那么那么让他们排队检入。
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {//检出该消息队列的锁
unIpLock(queueStr);
} catch (Execption e) {//捕获异常,不能让线程挂掉
e.printStackTrace();
}
}
}
}.start();
4、检入队列
synchronized (queueCache) {
while(true){
Integer size = queueCache.size();
if(size>=offerMaxQueue){
try {
queueCache.wait();
continue;//继续执行等待中的检入任务。
} catch (InterruptedException e) {
e.printStackTrace();
}
}//IF
if(size<=offerMaxQueue&&size>0){
queueCache.notifyAll();
}
break;//检入完毕
}//while
}
5、锁方法实现
/**
* 锁
* @param ip
* @return
* @throws
*/
public Boolean isLock(String queueStr) {
return this.redisManager.setnx(queueStr+"_lock", "LOCK", 10000)!=1;
}
//解锁
public void unIpLock(String queueStr) {
if(ip!=null){
this.redisManager.del(queueStr+"_lock");
//lock.unlock();
}
}
已有 0 人发表留言,猛击->> 这里<
ITeye推荐
java多线程消息队列_java多线程消息队列的实现相关推荐
- java消息 框架_java 框架-消息队列ActiveMQ
https://www.jianshu.com/p/ecdc6eab554c ActiveMQ从入门到精通(一) 22017.03.11 21:40:42字数 2650阅读 57286 这是关于消息中 ...
- java 如何判定消息已在队列_Java面试—消息队列
消息队列面试题 题目来自于中华石杉,解决方案根据自己的思路来总结而得.题目主要如下: 1. 为什么要引入消息队列? 消息队列的引入可以解决3个核心问题: 解耦 异步 削峰 解耦 在一个项目中,如果一个 ...
- javax消息队列_Java面试—消息队列
消息队列面试题 题目来自于中华石杉,解决方案根据自己的思路来总结而得. 题目主要如下: 1. 为什么要引入消息队列? 消息队列的引入可以解决3个核心问题: 解耦 异步 削峰 解耦 在一个项目中,如果一 ...
- javax消息队列_java实现消息队列的两种方式(小结)
实现消息队列的两种方式 Apache ActiveMQ官方实例发送消息 下载解压后拿到java代码实例 然后倒入IDE 如下: 请认真阅读readme.md文件,大致意思就是把项目打成两个jar包,然 ...
- java多线程总结图_Java多线程总结之Queue
标签:多线程(52)JAVA(605) 上个星期总结了一下synchronized相关的知识,这次将Queue相关的知识总结一下,和朋友们分享. 在Java多线程应用中,队列的使用率很高,多数生产消费 ...
- java线程代码实现_Java 多线程代码实现讲解
作为一个完全面向对象的语言,Java提供了类 java.lang.Thread 来方便多线程编程,这个类提供了大量的方法来方便我们控制自己的各个线程.那么如何提供给 Java 我们要线程执行的代码呢? ...
- java 锁旗标_Java多线程
Java多线程 1. 多线程存在的意义 多线程最大的作用就是能够创建"灵活响应"的桌面程序,而编写多线程最大的困难就是不同线程之间共享资源的问题,要使这些资源不会同时被多个线程访问 ...
- java 头尾 队列_Java数据结构之队列(动力节点Java学院整理)
队列的定义: 队列(Queue)是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表. (1)允许删除的一端称为队头(Front). (2)允许插入的一端称为队尾(Rear). (3)当队列中 ...
- java线程怎么用_Java多线程基本使用
一.概念 1.进程 1.1进程:是一个正在进行中的程序,每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元. 1.2线程:就是进程中一个独立的控制单元,线程在控制着进程的执行,一 ...
最新文章
- Java HotSpot VM 命令行参数【官方版】
- mysql againts函数_MariaDB / MySQL TO_SECONDS和AGGREGATE函数
- 计算机病毒的八个特征,计算机病毒的五个特征- 1:.单项选择题(8)
- nginx+php-fpm 的配置下,php的错误日志
- 什么是Windows Service应用程序?(转)
- java同时执行同一个方法吗_java 返回结果的同时执行另一个方法
- java 制作报表案例_javaweb项目报表案例
- python 删除文件、目录_python脚本删除文件及删除文件目录的方法
- P1111 修复公路(并查集)
- bugku_本地包含
- 2003文件共享服务器搭建,用Windows Server 2003搭建安全文件服务器(2)
- 测试 第七章 循环结构进阶 1205 草稿
- mips linux gcc mingw,gcc
- [Andriod设计模式之旅]——Builder模式
- linux racoon代码,源代码安装IPsec-Tools-0.7.2
- 在centos中如何用yum安装最新的yum源
- zoom下载官网android最新,Zoom手机版app下载安装包-Zoom手机版安卓软件下载v5.0-后壳下载...
- hba卡在服务器什么位置,设置服务器通过HBA卡启动目前服务器主流使用的是Qlogic和Emulex.doc...
- 记2012.12.20北京CISSP考试通过-“末日”前终于拿到“船票”
- Mac 运行windows软件