2011.08.30(2)——— java BlockingQueue ExecutorService

Java阻塞队列实现简单并发操作
本文介绍了一个简单的Java并发程序,使用阻塞队列实现多线程间的同步和数据交换。通过创建自定义的阻塞队列类,演示了如何在不同线程中执行任务并确保数据的正确传递。
2011.08.30(2)——— java BlockingQueue ExecutorService
参考:[url]http://www.iteye.com/topic/366591[/url]
[url]http://topic.youkuaiyun.com/u/20091226/16/b1337a92-a4a2-463e-a04e-7226e5fa78d2.html[/url]

并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列尾部,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。


package com.lp;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;


public class MyBlockingQueue extends Thread{
public static BlockingQueue<String> queue=new LinkedBlockingQueue<String>(3);
private int index;
public MyBlockingQueue(int i){
this.index=i;
}

public void run(){
try{
queue.put(String.valueOf(this.index));
System.out.println("put {"+this.index+"} into queue!");
}catch(Exception e){
e.printStackTrace();
}
}

public static void main(String args[]){
ExecutorService service=Executors.newCachedThreadPool();
for( int i=0; i<10; i++){
service.submit(new MyBlockingQueue(i));
}
Thread thread = new Thread(){
public void run(){
try{
while(true){
Thread.sleep((int)(Math.random()*1000));
if(MyBlockingQueue.queue.isEmpty()) break;
String str=MyBlockingQueue.queue.take();
System.out.println("take {" + str+"} out of queue!");
}
}catch(Exception e){
e.printStackTrace();
}
}
};
service.submit(thread);
service.shutdown();
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值