在线程访问第一个上锁的方法的时候,线程拿到了这把锁,同时其他线程陷入阻塞状态在等待,第一个获得锁的线程继续访问第二个上锁的方法,但这个时候,第二个上锁的方法是在第一个上锁方法的内部的,所以这个线程无法释放第一把锁,也就无法拿到第二个方法的锁,所以,此线程陷入了一种既无法释放锁也无法拿到锁的状态,这应该就是死锁了,于此同时其他线程也只能干等着,但是那个线程也很无奈啊,放不下也拿不起,都干等着,我都着急,于是我直接长按电源键,哈哈,这是我的理解
2019-01-09
最赞回答 / qq_Wzl_3
我对jvm不太了解,但用Linux中的给你解释下。
当一个线程想去获取一把锁而获取不到时,是处在一个死循环状态。
while( 没有得到锁)
{
尝试获取锁;
}
所以就相当于死在了这个循环里面。
当然还有尝试锁,先尝试获取,没获取到就退出,而不是死在循环中。
锁的内容还有很多,慢慢学吧。
2019-01-09
可以这样理解,因为静态方法属于类,当多个线程访问的这个静态方法的时候,相当于数据共享了,所以当给这个方法上锁之后,肯定是不能同时访问的,而不加static的话,就是多个线程自己执行自己的方法,cpu随机的,就算加了锁也没什么卵用。除非这个Runable子类被其他线程共享,这也是数据共享了
2019-01-08