参考的地址:http://www.blogjava.net/xylz/archive/2010/07/30/327582.html
这是空中网技术面试的一个题目。
import java.util.concurrent.Semaphore; import java.util.concurrent.SynchronousQueue; public class synchronouQueue_Thread { public static void main(String[] args) { //定义一个Semaphore对象,他就相当于一把锁一样。 final Semaphore sema = new Semaphore(1); //长生一个阻塞的队列,这个队列很特殊,当插入一个数据的时候,必须等待另外一个线程进行曲数据操作,当要取数据的时候也要等待另外一个线程插入数据, //它实现的就是很短的时间内在队列中存放数据,实际上队列中是没有任何一个元素的额、 //当插入一个数据就会立即被另外一个线程取走,后者当取走一个数据后,另外一个线程立即插入数据。 final SynchronousQueue<String> queue = new SynchronousQueue<String>(); for(int i =0;i<10;i++) { new Thread(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub String str; try { sema.acquire(); str = queue.take(); String s = test.dosomething(str); System.out.println(Thread.currentThread().getName()+"--" + s); sema.release(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); } for(int i=0;i<10;i++) { String str = "" + (i+1); try { queue.put(str); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } class test{ public static String dosomething(String s ){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } String str = s+ " ------ "+ System.currentTimeMillis()/1000; return str; } }
posted on 2012-06-20 23:08 c语言源码 阅读(261) 评论(0) 编辑 收藏 举报