如何通过扩展线程 class 来同步 Java 中的两个线程?
How can I synchronize two threads in Java by extending the Thread class?
我正在 Java 学习同步,但我无法找出为什么我无法获得 24000 作为“c.count”的结果。当我 运行 代码时,我得到 23674、23853 等。
你知道为什么吗?
public class Counter {
public int count = 0;
public static void main(String[] args) throws InterruptedException {
Counter c = new Counter();
ThreadT t1 = new ThreadT(c);
ThreadT t2 = new ThreadT(c);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(c.count);
}
}
class ThreadT extends Thread {
Counter c;
ThreadT(Counter c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 12000; i++) {
add();
}
}
synchronized void add() {
c.count++;
}
}```
请注意,t1
在 t1
对象上调用 add
,而 t2
在 t2
对象上调用 add
。虽然 add
是同步的,但 t1
和 t2
是两个不同的对象,因此这两个线程没有同步 彼此 .
每个线程都在自己的线程对象上调用同步方法,因此它只与自己同步。您需要两个线程在同一个对象上调用同步方法。
我正在 Java 学习同步,但我无法找出为什么我无法获得 24000 作为“c.count”的结果。当我 运行 代码时,我得到 23674、23853 等。 你知道为什么吗?
public class Counter {
public int count = 0;
public static void main(String[] args) throws InterruptedException {
Counter c = new Counter();
ThreadT t1 = new ThreadT(c);
ThreadT t2 = new ThreadT(c);
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(c.count);
}
}
class ThreadT extends Thread {
Counter c;
ThreadT(Counter c) {
this.c = c;
}
public void run() {
for (int i = 0; i < 12000; i++) {
add();
}
}
synchronized void add() {
c.count++;
}
}```
请注意,t1
在 t1
对象上调用 add
,而 t2
在 t2
对象上调用 add
。虽然 add
是同步的,但 t1
和 t2
是两个不同的对象,因此这两个线程没有同步 彼此 .
每个线程都在自己的线程对象上调用同步方法,因此它只与自己同步。您需要两个线程在同一个对象上调用同步方法。