作者H45 (!H45)
站内java
标题Re: [问题] thread的start
时间Mon Jun 16 11:06:21 2008
※ 引述《adrianshum (Alien)》之铭言:
: ※ 引述《H45 (!H45)》之铭言:
: : 再做一个鸣枪,让 a 和 b 去听这个枪声
: : 听到之後再开跑。
: [43]
: : ======================================================
: : 实际测试显示,B 总是比 A 先跑完
: : 以下是本程式的输出
: : B: Job Finished.
: : A: Job Finished.
: : 不要问我为什麽会这样 =.=
: 不用搞那麽多.
: JDK5 的 concurrent package 里有 Barrier 可用
: java.util.concurrent.CyclicBarrier
: alien
感谢前辈指点 m(_ _)m
以下是修改後的程式码:
public static void main(String[] args) throws Exception {
// 仍然是两个选手,所以给栅栏 2 个洞
final CyclicBarrier barrier = new CyclicBarrier(2);
// 一样是同样的赛程,跑步者 (runner)
Runnable runner = new Runnable() {
public void run() {
try {
// 到栅栏等待所有选手就绪
barrier.await();
// 开跑!跑 1000 毫秒!
Thread.sleep(1000);
// 跑完之後和大家说你办到了!
System.out.println(Thread.currentThread().getName() + ": Job Finished.");
} catch (Exception e) {
e.printStackTrace();
}
}
};
// a, b 两个选手,名叫 "A", "B", respectively.
Thread a = new Thread(runner, "A");
Thread b = new Thread(runner, "B");
// 叫 a, b 选手开始动!
a.start();
b.start();
// 等 a, b 挂掉....
a.join();
b.join();
}
执行结果有时 A 较快,有时 B 较快
可能一:
A: Job Finished.
B: Job Finished.
可能二:
B: Job Finished.
A: Job Finished.
但是「可能一」的出现率似乎较高的样子,以我的电脑测试结果而言。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.116.247.13
1F:推 csihcs:不是本来就不能预期哪一个 thread 先跑完吗???? 06/16 21:32