您好我正在阅读本书的快乐,并且在关于STM的部分中,他们有2个交易的图像,其中A最初从参考中检索与B相同的值,然后事务A和B都进行计算但是A完成首先,提交变量,因此B必须重试.
但我正在思考的是,B是否会重复A的提交.如果是这样的话那么如果相反呢?那么最终的价值将明显不同.
这似乎很容易被忽视,我相信我完全不理解它.请帮我解开这个.
为什么n有时等于1或2
private static int n = 0;
private static Thread t1, t2;
private synchronized static void increment() {
n++;
}
public static void main(String[] args) {
t1 = new Thread(new Runnable() {
public void run() {
increment();
}
});
t2 = new Thread(new Runnable() {
public void run() {
t1.start();
increment();
}
});
t2.start();
try {
t2.join();
} catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(n);
}
Run Code Online (Sandbox Code Playgroud)
增量方法不应该只允许一个线程在任何给定时刻执行它吗?
也许它是调试器,似乎当我正常运行时我总是得到2但是当我调试代码时它有时会返回1.