java有一种方法可以知道代码中系统可以交换线程的所有可能位置
我正在读一本名为《实践中的Java并发》的书,在第一章中,以下代码被证明是线程不安全的
public class UnsafeSequence {
private int value;
/** Returns a unique value. */
public int getNext() {
return value++;
}
}
因此,如果两个线程运行这段代码,我们可能会得到不想要的结果,因为它们将在不同的步骤中进行交换,例如读取、修改和写入值。这是由操作系统决定的,还是线程在不同的“字节码命令”上相互切换?有没有办法知道线程可能从一个线程切换到另一个线程的所有可能位置,不仅仅是针对这段代码,而且是一般情况
# 1 楼答案
只要系统调度器愿意,它就会发生。如果JVM只将调度传递给本机处理器,那么它与JVM无关
# 2 楼答案
正如一些评论所指出的,没有。你可以做两件事:
以线程安全的方式编写类,这样就不会出现线程调度问题
使用并发支持来防止问题
继续读这本书