【发布时间】:2012-02-27 05:35:41
【问题描述】:
我开始学习一些Java并发概念并投入使用。 但其中一段代码超出了我的理解范围。
public class Count {
private int count = 0;
public synchronized void setCount(int count) {
this.count = count;
}
public synchronized int getCount() {
return count;
}
}
class CountRunner extends Thread {
Count count;
public CountRunner(Count count) {
this.count = count;
}
public void run() {
for (int i = 1; i <= 1000; i++) {
count.setCount(count.getCount() + 1);
}
}
}
class TestCount {
public static void main(String[] args) throws Exception {
Count count = new Count();
CountRunner runnerA = new CountRunner(count);
CountRunner runnerB = new CountRunner(count);
runnerA.start();
runnerB.start();
runnerA.join(); //join statement here
runnerB.join();
System.out.println("count.getCount = " + count.getCount());
}
}
问题:
1. 很多次结果都小于2000,为什么?
2.如果删除2条join()语句,为什么count.getCount = 451,甚至更少?
3.我认为删除join()语句不会有任何影响,
因为我已经有同步方法每次将一个对象锁定到一个线程?
那么,使用 Synchronized 和 join() 有什么意义呢?
【问题讨论】:
标签: java concurrency concurrent-programming java.util.concurrent