import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
/**
* 阻塞队列之实战(现有程序代码模拟产生16个日志对象,需要16秒才能打印完,
* 现添加四个线程用于打印16个日志,用时4秒,如何实现)
* @author 谭飞
* @date 2012-02-07
*/
public class ArrayBlockingQueueTest {
/**
* @param args
*/
public static void main(String[] args) {
final BlockingQueue<String> queue = new ArrayBlockingQueue<String>(1);//实例化阻塞队列对象
for(int i = 0; i < 4; i++)//创建四个线程
{
new Thread(new Runnable(){
@Override
public void run() {
while(true)
{
try {
final String log = queue.take();//取得阻塞队列的值
printLog(log);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}}).start();
}
System.out.println("开始:" + System.currentTimeMillis()/1000);
for(int i = 0; i < 16; i++)
{
final String log = "" + (i+1);
//printLog(log);原始
/*begin 修改*/
{
try {
queue.put(log);//向阻塞队列里加入值
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/*end 修改*/
}
}
/**
* 打印日志
* @param log
*/
public static void printLog(String log)
{
System.out.println(log + ":" + System.currentTimeMillis()/1000);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
阻塞队列之实战
最新推荐文章于 2025-04-24 15:37:40 发布