考虑下面的代码:
public synchronized void onSignalsTimeout(List<SignalSpec> specs) {
if (specs != null && specs.size() > 0) {
for (SignalSpec spec : specs) {
ParsedCANSignal timeoutedSignal = new ParsedCANSignal();
SignalsProvider.getInstance().setSignal(spec.name, spec.parent.parent.channel, timeoutedSignal);
}
}
}
我有一个简单的问题: 当线程1调用onSignalsTimeout方法时,线程2能访问在该方法中被访问的对象吗?
无法找到任何地方说明'synchronized'锁只限制对该方法的访问还是对该方法中使用的所有对象的访问。
final Object my_data_lock=new Object()
,并编写您的代码,以便只在synchronized(my_data_lock)
内部访问数据。由于Java始终只允许一个线程在任何时刻同步给定对象,因此任何时刻只有一个线程将访问数据。 - Solomon Slow