- 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个线程已到达,正在等候
请问大家为什么
|
|