您可以复制粘贴以下示例以在本地计算机上运行。我正在学习MultiThreading,并且在网上遇到了这个示例。我对为什么方法add(inside class Counter)如果声明为sync会有所不同感到困惑,您可以从中删除sync的关键字,并且不会影响最终结果,所以我只是想知道该服务的目的是什么宣布它已同步
class Counter {
long count = 0;
public synchronized void add(long value) {
this.count += value;
System.out.println(count + "-" + Thread.currentThread().getName());
}
}
class CounterThread extends Thread {
protected Counter counter = null;
public CounterThread(Counter counter) {
this.counter = counter;
}
public void run() {
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Logger.getLogger(CounterThread.class.getName()).log(Level.SEVERE, null, ex);
}
counter.add(i);
}
}
}
public class Example {
public static void main(String[] args) {
Counter counter = new Counter();
Thread threadA = new CounterThread(counter);
Thread threadB = new CounterThread(counter);
Thread threadC = new CounterThread(counter);
threadA.start();
threadB.start();
threadC.start();
}
}
最佳答案
关键字synchronized
可防止threadA,threadB和threadC同时执行操作。重要的是要了解this.count += value
在内部实现为三个操作:
如果删除
synchronized
关键字,那么可以想象以下事件序列:关于java - 在下面的示例中声明一个同步方法的目的是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27560051/