首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么这个类不是线程安全的?

为什么这个类不是线程安全的?
EN

Stack Overflow用户
提问于 2015-05-13 15:38:12
回答 2查看 10.4K关注 0票数 95
代码语言:javascript
复制
class ThreadSafeClass extends Thread
{
     private static int count = 0;

     public synchronized static void increment()
     {
         count++;
     }

     public synchronized void decrement()
     {
         count--;
     }
}

谁能解释一下为什么上面的类不是线程安全的?

EN

回答 2

Stack Overflow用户

发布于 2015-05-13 15:47:28

您有两个同步的方法,但其中一个是静态的,另一个不是。当访问一个同步的方法时,根据它的类型(静态或非静态),不同的对象将被锁定。对于静态方法,锁将放在Class对象上,而对于非静态块,锁将放在运行该方法的类的实例上。因为您有两个不同的锁定对象,所以可以有两个线程同时修改同一对象。

票数 23
EN

Stack Overflow用户

发布于 2015-05-13 18:18:42

因为有两种不同的方法,一个是实例级的,另一个是类级的,所以你需要锁定两个不同的对象才能使它成为ThreadSafe

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30208524

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档