我是 Java 多线程的新手,不太了解发生了什么。
从在线教程和讲义中,我知道synchronized
必须应用于非空对象的块确保只有一个线程可以执行该代码块。由于数组是 Java 中的对象,因此可以对其应用同步。此外,如果数组存储对象,我也应该能够同步数组的每个元素。
我的程序有几个线程更新了一个数字数组,因此我创建了一个Long
对象数组:
synchronized (grid[arrayIndex]){
grid[arrayIndex] += a.getNumber();
}
这段代码位于run()
我扩展的线程类的方法中。数组 grid 由我的所有线程共享。但是,这不会在一个线程上运行相同的程序时返回正确的结果。