作为练习,我被问到以下代码片段在编写多线程应用程序时是否是一个好的实践。答案是不是,没有进一步的动机,但我不明白为什么会这样。
我认为关键字synchronized
可以防止线程相互干扰,并且所有方法都太小,您不必担心饥饿。
public class myThread{
private static int a = 0;
public synchronized void incA(){
a++;
}
public synchronized void decA(){
a--;
}
public synchronized int getA(){
return a;
}
}
上面的代码片段有什么问题?
最佳答案
因为您的代码不是线程安全的。您有一个静态
变量和实例方法。
这不仅是“不适合”,而且是错误。
您的方法在 this
上同步
,因为它们是实例方法,这意味着您的 MyThread
的每个实例都将拥有自己的锁定。
关于java - 为什么这个简短的片段不适合多线程应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998561/