【发布时间】:2021-08-09 15:57:59
【问题描述】:
我正在尝试使用 Java Concurrent 的锁 API 同步 2 个线程。该代码基本上使用 2 个线程将计数器增加到某个数字,但即使在使用锁之后,我得到的结果也小于所述数字。 代码-
import java.util.concurrent.*;
import java.util.concurrent.locks.ReentrantLock;
class DemoClass {
public int count =0;
public ReentrantLock lock = new ReentrantLock();
public void increment() {
lock.lock();
try {
count++;
} finally {
lock.unlock();
}
}
}
public class Main {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(2);
DemoClass demoClass = new DemoClass();
int i=0;
for(;i<=10000;i++) {
executor.submit(demoClass::increment);
}
executor.shutdown();
System.out.println( demoClass.count); // 10000
}
}
不知道我在这里做错了什么。
【问题讨论】:
-
"// 10000" 注意正确的结果是10001,因为你使用了
<=10000。 -
@AndyTurner,是的,你是对的。答案应该是 10001
标签: java multithreading java.util.concurrent