package cn.itcast;import java.util.concurrent.BrokenBarrierException;
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() + 1) + "个已经到达,"
+ (cb.getNumberWaiting() == 2 ? "都到齐了,继续走啊" : "继续等待"));
cb.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}; service.execute(runnable);
}
service.shutdown();
}
}
上述代码执行过程中,getNumberWaiting()方法不能正确打印出正在等待的线程数。。很奇怪,这里也不需要什么同步的问题吧,运行了好多次。。还求大神赐教。。
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() + 1) + "个已经到达,"
+ (cb.getNumberWaiting() == 2 ? "都到齐了,继续走啊" : "继续等待"));
cb.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}
}; service.execute(runnable);
}
service.shutdown();
}
}
上述代码执行过程中,getNumberWaiting()方法不能正确打印出正在等待的线程数。。很奇怪,这里也不需要什么同步的问题吧,运行了好多次。。还求大神赐教。。
解决方案 »
- java BigInteger范围
- struts1和struts2的区别
- 请教:什么原因Exception in thread "main" java.lang.NoSuchMethodError: Point.pointNum()I
- java中的环境变量
- JAVA 和本地相关信息的获取问题(后续)
- copy数据的问题
- java中实现定时器的实现!在线等回复
- rmi程序执行时出现的问题,急!!!!
- 何为tomcat,,等。。java 入门必懂!!回答有分!!!
- 关于jreport4.5的注册码
- 关于java.net包中的URLConnection类的一些问题
- 计算元素出现次数并存入map,急!
线程pool-1-thread-1即将到达集合地点1,当前已有1个已经到达,继续等待
线程pool-1-thread-2即将到达集合地点1,当前已有1个已经到达,继续等待
线程pool-1-thread-3即将到达集合地点1,当前已有2个已经到达,继续等待
这里少了一个括号。