Tat*_*nan 3 java multithreading synchronization
我可以在另一个中包含一个同步块来同步另一个对象吗?
例:
synchronized(myObjetc1){
// code
synchronized(myObjetc2){
// code
}
}
Run Code Online (Sandbox Code Playgroud)
如果是这样,它仍然是一种正确的技术还是风险太大?
Sot*_*lis 10
如果你在其他地方以相同的顺序同步,那就没问题了.
如果其他一些线程要执行以下代码
synchronized(myObjetc2){
// code
synchronized(myObjetc1){
// code
}
}
Run Code Online (Sandbox Code Playgroud)
你可能会遇到僵局.
假设上面的变量引用相同的对象,请考虑以下情况.第一个线程(您的代码)锁定监视器myObjetc1.线程调度程序切换线程上下文.第二个线程(上面的代码)锁定监视器myObjetc2.线程调度程序切换线程上下文.第一个线程尝试锁定监视器myObjetc2.它必须等待,因为第二个线程有它.线程调度程序切换上下文.第二个线程尝试锁定监视器myObjetc1.它必须等待,因为第一个线程有它.繁荣!僵局.