A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹兆国 中级黑马   /  2014-7-4 21:42  /  743 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package cn.hy.day3.thread;

  2. import java.util.concurrent.CyclicBarrier;
  3. import java.util.concurrent.ExecutorService;
  4. import java.util.concurrent.Executors;

  5. public class CyclicBarrierTest {
  6.         public static void main(String[] args) {
  7.                 ExecutorService service = Executors.newCachedThreadPool();
  8.                 final CyclicBarrier cb = new CyclicBarrier(3);
  9.                 for(int i=0;i<3;i++){
  10.                         Runnable runnable = new Runnable(){
  11.                                 public void run() {
  12.                                         try {
  13.                                                 Thread.sleep((long)(Math.random()*10000));
  14.                                                 System.out.println("线程"+Thread.currentThread().getName()
  15.                                                                 +"即将到达集合地点1,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
  16.                                                 cb.wait();
  17.                                                
  18.                                                 Thread.sleep((long)(Math.random()*10000));
  19.                                                 System.out.println("线程"+Thread.currentThread().getName()
  20.                                                                 +"即将到达集合地点2,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
  21.                                                 cb.wait();
  22.                                                
  23.                                                 Thread.sleep((long)(Math.random()*10000));
  24.                                                 System.out.println("线程"+Thread.currentThread().getName()
  25.                                                                 +"即将到达集合地点3,当前已有"+cb.getNumberWaiting()+"个线程已到达,正在等候");
  26.                                                 cb.wait();
  27.                                         } catch (Exception e) {
  28.                                                 // TODO: handle exception
  29.                                         }
  30.                                 }
  31.                                
  32.                         };
  33.                         service.execute(runnable);
  34.                 }
  35.                 service.shutdown();
  36.         }
  37. }
复制代码
这是我写的,跟老师写的一模一样
  但运行结果不同。老师的:
线程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个线程已到达,正在等候

请问大家为什么

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马