我上了以下课
class A{
private int id =0;
public void setMessageId(Message m) {
synchronized(m) {
m.setId(id++);
}
}
}两个具有不同消息实例的类A的线程是否可以同时进入同步块,并为不同的消息实例设置相同的id?
发布于 2012-07-31 15:28:07
是。由于该块是在消息上同步的,因此使用两个不同消息实例的两个线程可以同时进入synchronized块,并且两者都获得相同的ID。
使方法同步,一切都会好起来的。或者使用AtomicInteger。
发布于 2012-07-31 15:27:02
是。您需要在包含id字段的对象(在本例中为'A')或某个公共对象上进行同步。
发布于 2012-07-31 15:29:02
如果只在m上同步,那么两个对象将能够修改A的相同实例。您需要在存储值id的对象上同步。
https://stackoverflow.com/questions/11735158
复制相似问题