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的步骤会被回滚吗?
Thread1没有放弃锁定,所以它仍然拥有它.当Thread2准备接受锁定时,它会发现它必须等待并进入BLOCKED状态.操作系统下次调度Thread1时,它将完成执行并释放锁定.这允许Thread2再次可调度.