并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列。该类主要提供了两个方法put()和take(),前者将一个对象放到队列尾部,如果队列已经满了,就等待直到有空闲节点;后者从head取一个对象,如果没有对象,就等待直到有可取的对象。
可能的运行结果:
package test;
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();
}
}
可能的运行结果:
put {0} into queue!
put {1} into queue!
put {3} into queue!
take {0} out of queue!
put {2} into queue!
take {1} out of queue!
put {7} into queue!
take {3} out of queue!
put {5} into queue!
take {2} out of queue!
put {4} into queue!
take {7} out of queue!
put {6} into queue!
put {9} into queue!
take {5} out of queue!
take {4} out of queue!
put {8} into queue!
take {6} out of queue!
take {9} out of queue!
take {8} out of queue!
本文深入探讨了并发库中的阻塞队列,通过实例展示了如何使用阻塞队列进行线程间的数据交换,以及在多线程环境下实现同步与并发的基本原理。重点介绍了阻塞队列的主要方法put()和take(),并通过代码示例说明了它们的使用场景和效果。
8789

被折叠的 条评论
为什么被折叠?



