您的位置:首页 > 产品设计 > UI/UE

JUC学习之ArrayBlockingQueue

2014-05-28 11:05 288 查看
package queue;

import java.util.concurrent.ArrayBlockingQueue;

public class ArrayBlockingQueueUse {

/**
* @Title: ArrayBlockingQueue 实现生成者消费者队列
* @Description: 尽量使用本身的put和take方法,保持Blocing特性,如果需要用继承的poll和offer建议带超时时间的方法
* @param @param args    设定文件
* @return void    返回类型
* @throws
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayBlockingQueue<Integer> queue = new ArrayBlockingQueue<Integer>(100);
AQueueProductor productor = new AQueueProductor(queue);
productor.setName("AQueueProductor");
productor.start();
//----------------
AQueueConsumer consumer1 = new AQueueConsumer(queue);
consumer1.setName("consumer1");
AQueueConsumer consumer2 = new AQueueConsumer(queue);
consumer2.setName("consumer2");
consumer1.start();
consumer2.start();
}
}
/**
* 消费者
* */
class AQueueConsumer extends Thread{
private ArrayBlockingQueue<Integer> queue;
public AQueueConsumer(ArrayBlockingQueue<Integer> queue){
this.queue = queue;
}
public void run(){
while(true){
try {
Integer message = queue.take();
System.out.println("======== "+this.getName()+" 获取到消息:"+message+" ========");
Thread.currentThread().sleep(100);
} catch (InterruptedException e) {
throw new RuntimeException(e.getMessage(),e);
}
}
}
}
/**
* 生产者
* */
class AQueueProductor extends Thread{
private ArrayBlockingQueue<Integer> queue;
public AQueueProductor(ArrayBlockingQueue<Integer> queue){
this.queue = queue;
}
public void run(){
int i=0;
while(true){
i++;
Integer message = new Integer(i);
try {
queue.put(message);
if(i%20==0){
//--休息一会
System.out.println("============"+this.getName()+" 累计生产Message数量:"+i+" ============");
Thread.currentThread().sleep(5000);
}
} catch (InterruptedException e) {
throw new RuntimeException(e.getMessage(),e);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: