繁体   English   中英

同步块内的同步块

[英]Synchronized block inside synchronized block

我可以在另一个中包含一个同步块来同步另一个对象吗?

例:

synchronized(myObjetc1){
    // code
    synchronized(myObjetc2){
        // code         
    }           
}

如果是这样,它仍然是一种正确的技术还是风险太大?

如果你在其他地方以相同的顺序同步,那就没问题了。

如果其他一些线程要执行以下代码

synchronized(myObjetc2){
    // code
    synchronized(myObjetc1){
        // code         
    }           
}

你可能会遇到僵局。

假设上面的变量引用相同的对象,请考虑以下情况。 第一个线程(您的代码)将监视器锁定在myObjetc1 线程调度程序切换线程上下文。 第二个线程(上面的代码)将监视器锁定在myObjetc2 线程调度程序切换线程上下文。 第一个线程尝试将监视器锁定在myObjetc2 它必须等待,因为第二个线程有它。 线程调度程序切换上下文。 第二个线程尝试将监视器锁定在myObjetc1 它必须等待,因为第一个线程有它。 繁荣! 僵局。

是的,你可以做到。

直到您遵守锁定规则并且这样做才能解决您的要求,即罚款。

但是,很多时候这样的事情会引起DeadLock问题,如果做错了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM