同步块内的同步块

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.它必须等待,因为第一个线程有它.繁荣!僵局.