具有线程抢占的多线程和同步

Swa*_*rma 3 java multithreading synchronization

假设我有以下代码

public synchronized void method()
{
    if(something == null)
    {
        something = new SomeThing();
    }
    //do something 
}
Run Code Online (Sandbox Code Playgroud)

现在假设在一个多线程环境中,一个线程[线程1]进入该方法并在它执行之后new Something();但在它能够分配之前被抢占something.然后另一个线程[线程2]也尝试调用该方法.现在究竟发生了什么?Thread 1获得的锁定会发生什么?Thread 1的步骤会被回滚吗?

Tim*_*der 7

Thread1没有放弃锁定,所以它仍然拥有它.当Thread2准备接受锁定时,它会发现它必须等待并进入BLOCKED状态.操作系统下次调度Thread1时,它将完成执行并释放锁定.这允许Thread2再次可调度.