java – 使用线程抢占进行多线程和同步

假设我有以下代码

public synchronized void method()
{
    if(something == null)
    {
        something = new SomeThing();
    }
    //do something 
}

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

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

转载注明原文:java – 使用线程抢占进行多线程和同步 - 代码日志