为什么这个简短的代码段不适合多线程应用程序?

时间:2016-03-14 21:36:11

标签: java multithreading synchronization

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

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

以上代码段有什么问题?

1 个答案:

答案 0 :(得分:3)

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

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

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