[英]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.