我正在准备考试,经过一些抽样练习(其中包含正确的答案),我根本无法理解.
问题
(多重选择):下面的程序的一些可能的结果是什么?
一个)
价值是1.
价值是1.
最终值为1.
B)
价值是1.
价值是1.
最终值为2.
C)
价值是1.
最终值为1.
价值是2.
D)
价值是1.
最终值为2.
价值是2.
该程序
public class Thread2 extends Thread { static int value = 0; static Object mySyncObject = new Object(); void increment() { int tmp = value + 1; value = tmp; } public void run() { synchronized(mySyncObject) { increment(); System.out.print("Value is " + value); } } public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread2(); Thread t2 = new Thread2(); t1.start(); t2.start(); t1.join(); t2.join(); System.out.print("Final value is " + value); } }
正确的答案是:A),C)和D).
对于情况A)我不明白两个线程(从同步块(!)中增加一个看似静态的变量)的最终可能会被设置为1,最终的值也是1?
情况C和D对我来说同样令人困惑,因为我真的不明白main()在所需的线程(t1和t2)之前完成的可能性如何.我的意思是,他们的join()方法已经从main函数中被调用了,所以要理解主要函数应该是等到t1和t2都用它们的run()方法完成(并且打印出它们的值) …?
如果有人可以引导我,这将是非常棒的.
提前感谢,非常感谢!
芥末