作为练习,我被问到在编写多线程应用程序时,以下代码段是否是好的做法。答案键说这不是没有进一步的动机,但是我不明白为什么会这样。

我认为关键字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;
    }
}


上面的代码片段有什么问题?

最佳答案

因为您的代码不是线程安全的。您有一个static变量和实例方法。

这不仅是“不适合”,而且是错误的。

您的方法是synchronized上的this,因为它们是实例方法,这意味着MyThread的每个实例都将拥有自己的锁。

关于java - 为什么这段简短的代码片段不适用于多线程应用程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35998561/

10-16 13:04