我有类似这样的代码段
MyServiceConnection obj = new MyServiceConnection();
class MyServiceConnection implements ServiceConnection {
@Override
public void onServiceDisconnected(ComponentName name) {
myNotificationBinder = null;
myBinderService.broadcastServiceIsDown();
}
@Override
public void onServiceConnected(ComponentName name, IBinderService service) {
synchronized(this) {
mNotificationBinder.broadcastServiceIsUp();
try {
notifyAll();
} catch(RemoteException e) {
Log.e(TAG, "Remote exception : " + e);
}
}
}
}
}
类MyServiceConnection
仅在我的项目中使用一个对象。考虑两个线程正在同时t1
和t2
访问此线程,但是用不同的方式说,
t1
正在访问onServiceConnected
并获得对obj
的锁定。现在,在t2
在onServiceDisconnected
中完成其执行之前,线程t1
能够访问onServiceConnected
吗?
答案 0 :(得分:3)
由于onServiceDisconnected
未同步,因此t2
不会在调用时被阻止。同步仅影响在同一对象上同步的其他线程。除此之外,与synced关键字一起使用的对象没有任何特殊含义。
答案 1 :(得分:1)
是的,您将能够调用任何其他方法并执行synced(this)之外的任何其他代码。除非您的类中的其他代码调用了sync(this),否则该代码可以由任意数量的线程同时执行