java - 为什么这个简短的片段不适合多线程应用程序?

标签 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;
    }
}

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

最佳答案

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

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

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

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

相关文章:

oauth-2.0 - 在 IdentityServer 和应用程序之间保持数据同步

javascript - 通过 Websocket 同步任意两个 Javascript 对象

multithreading - Delphi2006 - 是否有带有 TMultiReadExclusiveWriteSynchronizer 的 TList?

java - 使用 MMMM 和 MMMMM 使用 SimpleDateFormat 提取月份名称有什么区别

multithreading - 在单独的线程中运行 Windows 服务并使用 autofac 进行 DI

python - python2 与 python 3 中的多线程

c++ - boost::asio 异步条件

java - 如何询问用户是否要再次运行程序?

java - 如何从父对象通知所有子对象?

java - 无法同步(java.util.ConcurrentModificationException)