争用条件:整数的最小值和最大值范围
2022-09-01 10:56:46
我最近在一次采访中被问到这个问题。
给定以下代码,静态整数的最小和最大可能值是多少?num
import java.util.ArrayList;
import java.util.List;
public class ThreadTest {
private static int num = 0;
public static void foo() {
for (int i = 0; i < 5; i++) {
num++;
}
}
public static void main(String[] args) throws Exception{
List<Thread> threads = new ArrayList<Thread>();
for (int i = 0; i < 5; i++) {
Thread thread = new Thread(new Task());
threads.add(thread);
thread.start();
}
for (int i = 0; i < 5; i++) {
threads.get(i).join();
}
// What will be the range of num ???
System.out.println(ThreadTest.num);
}
}
class Task implements Runnable {
@Override
public void run() {
ThreadTest.foo();
}
}
我告诉他们,最大值将为25(如果没有争用条件),最小值将为5(如果每次迭代时所有线程之间存在争用条件)。
但面试官说,最小值甚至可以低于5。
这怎么可能?