同步如何运作?

时间:2019-03-27 17:43:27

标签: java android multithreading

我有类似这样的代码段

  

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仅在我的项目中使用一个对象。考虑两个线程正在同时t1t2访问此线程,但是用不同的方式说,

t1正在访问onServiceConnected并获得对obj的锁定。现在,在t2onServiceDisconnected中完成其执行之前,线程t1能够访问onServiceConnected吗?

2 个答案:

答案 0 :(得分:3)

由于onServiceDisconnected未同步,因此t2不会在调用时被阻止。同步仅影响在同一对象上同步的其他线程。除此之外,与synced关键字一起使用的对象没有任何特殊含义。

答案 1 :(得分:1)

是的,您将能够调用任何其他方法并执行synced(this)之外的任何其他代码。除非您的类中的其他代码调用了sync(this),否则该代码可以由任意数量的线程同时执行