首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java并发混淆

Java并发混淆
EN

Stack Overflow用户
提问于 2012-07-31 15:25:29
回答 8查看 90关注 0票数 0

我上了以下课

代码语言:javascript
复制
class A{

private int id =0;
   public void setMessageId(Message m) {
      synchronized(m) {
        m.setId(id++);
      }
   }
}

两个具有不同消息实例的类A的线程是否可以同时进入同步块,并为不同的消息实例设置相同的id?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2012-07-31 15:28:07

是。由于该块是在消息上同步的,因此使用两个不同消息实例的两个线程可以同时进入synchronized块,并且两者都获得相同的ID。

使方法同步,一切都会好起来的。或者使用AtomicInteger。

票数 2
EN

Stack Overflow用户

发布于 2012-07-31 15:27:02

是。您需要在包含id字段的对象(在本例中为'A')或某个公共对象上进行同步。

票数 3
EN

Stack Overflow用户

发布于 2012-07-31 15:29:02

如果只在m上同步,那么两个对象将能够修改A的相同实例。您需要在存储值id的对象上同步。

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

https://stackoverflow.com/questions/11735158

复制
相关文章

相似问题

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