如何通过扩展线程 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++;
    }
}```

请注意,t1t1 对象上调用 add,而 t2t2 对象上调用 add。虽然 add 是同步的,但 t1t2 是两个不同的对象,因此这两个线程没有同步 彼此 .

每个线程都在自己的线程对象上调用同步方法,因此它只与自己同步。您需要两个线程在同一个对象上调用同步方法。