我开始学习一些 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() 有什么意义呢?