Jon*_*n B 0 java multithreading
我正在尝试使用 2 个线程将最初为 0 的计数器增加到 1000。这是我的代码
class CounterVar {
private int val;
CounterVar() {
val = 0;
}
public void increment() {
Object obj = new Object();
synchronized(obj) {
val++;
}
}
public int getVal() {
return val;
}
}
public class Counter {
public static void main(String[] args) throws InterruptedException {
CounterVar counter = new CounterVar();
Thread t1 = new Thread(() - > {
for (int i = 0; i < 500; i++)
counter.increment();
});
Thread t2 = new Thread(() - > {
for (int i = 0; i < 500; i++)
counter.increment();
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(counter.getVal());
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里没有得到 1000 的输出,它总是更少。我已经实现了同步,但不明白这里有什么问题。还想澄清一下,当线程 1 增加计数器时,我是否在饿死线程 2。
提前致谢。
您没有正确同步线程。要同步多个线程,您必须使用一个公共对象作为同步机制,但是您要为每个线程创建一个新对象。相反,试试这个:
class CounterVar {
private int val;
private final Object obj = new Object();
public void increment() {
synchronized(obj) {
val++;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,更简单的没有obj:
public synchronized void increment() {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |