Sid*_*iya 5 java multithreading
虽然我找到了答案,但我遇到了一个我很难理解的问题.请看这个并给我一个答案的解释.
public class TestSeven extends Thread {
private static int x;
public synchronized void doThings() {
int current = x;
current++;
x = current;
}
public void run() {
doThings();
}
}
Run Code Online (Sandbox Code Playgroud)
问题和答案是......哪种说法是正确的?
A.编译失败.
B.在运行时抛出异常.
C.同步run()方法会使类成为线程安全的.
D.变量"x"中的数据受到保护,不会出现并发访问问题.
E. 将doThings()方法声明为static将使类成为线程安全的.
F.在同步(new Object()){}块中包装doThings()中的语句将使该类成为线程安全的.
大胆的一个作为答案.感谢您的回复!
如果你有这样的同步实例方法,它会在实例上同步,即每个实例都可以自己访问该方法.但是x是静态的,因此任何实例都TestSeven可以同时访问它.如果doThings()是静态的,它会在类上同步,因此在给定时间只有一个实例可以访问同步代码.