黑马程序员技术交流社区
标题:
线程并发库_CyclicBarrierTest
[打印本页]
作者:
尹兆国
时间:
2014-7-4 21:42
标题:
线程并发库_CyclicBarrierTest
package cn.hy.day3.thread;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class CyclicBarrierTest {
public static void main(String[] args) {
ExecutorService service = Executors.newCachedThreadPool();
final CyclicBarrier cb = new CyclicBarrier(3);
for(int i=0;i<3;i++){
Runnable runnable = new Runnable(){
public void run() {
try {
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程"+Thread.currentThread().getName()
+"即将到达集合地点1,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
cb.wait();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程"+Thread.currentThread().getName()
+"即将到达集合地点2,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
cb.wait();
Thread.sleep((long)(Math.random()*10000));
System.out.println("线程"+Thread.currentThread().getName()
+"即将到达集合地点3,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
cb.wait();
} catch (Exception e) {
// TODO: handle exception
}
}
};
service.execute(runnable);
}
service.shutdown();
}
}
复制代码
这是我写的,跟老师写的一模一样
但运行结果不同。老师的:
线程pool-1-thread-3即将到达集合地点1,当前已有0个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点1,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点1,当前已有2个已经到达,正在等候
线程pool-1-thread-3即将到达集合地点2,当前已有0个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点2,当前已有1个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点2,当前已有2个已经到达,正在等候
线程pool-1-thread-3即将到达集合地点3,当前已有0个已经到达,正在等候
线程pool-1-thread-1即将到达集合地点3,当前已有1个已经到达,正在等候
线程pool-1-thread-2即将到达集合地点3,当前已有2个已经到达,正在等候
我的:
线程pool-1-thread-2即将到达集合地点1,当前已有0个线程已到达,正在等候
线程pool-1-thread-3即将到达集合地点1,当前已有0个线程已到达,正在等候
线程pool-1-thread-1即将到达集合地点1,当前已有0个线程已到达,正在等候
请问大家为什么
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2