java - 在 Java 中同步人群(第 2 部分)

标签 java multithreading synchronization

这个问题与我刚刚发布的另一个问题类似(并得到了回答)。所以问题的表述是一样的: “我正在编写一个演示程序来解释如何在 Java 中调节一群线程的并发性,但结果并不符合我的预期。” 这次我想使用锁,代码如下:

public class Parcount extends Thread {
    private static int N=1000;
    private static int x=0;
    private final ReentrantLock l = new ReentrantLock();
    public static void main(String[] args) 
            throws InterruptedException {
        Thread[] t = new Thread[N];
        int i;
        for ( i=N-1; i>=0; i-- ) { 
            t[i]=new Parcount(); 
            t[i].start();
        }
        for ( i=N-1; i>=0; i-- ) t[i].join();
        System.out.println(x);
    }
    public void run() { l.lock(); x++; l.unlock(); }
}

创建了 1000 个线程,并且所有线程都希望增加 x。最终的打印输出应该是 1000,但事实并非如此:一些增量丢失了。代码看起来很简单,但我可能错过了一些东西:-/

谢谢...

最佳答案

每个线程都有一把锁,每个线程都有自己的锁。您希望为所有线程提供一个锁以获得正确的同步。

关于java - 在 Java 中同步人群(第 2 部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22914548/

相关文章:

JavaFX UI 创建和进度条更新

c - OpenMP:单一的共享变量,等待构造

java - 线程获得级别

java同步静态方法

java - 从 JavaFX WebView 中的 Ace Editor 获取代码

java - 为什么spring boot启动时会清除旧的日志配置

java - Liquibase默认表空间

JAR 文件中的 Java Applet

java - 如何从 map 中获取数据?

java - 我到底需要同步什么,对象或对象内的数据