1.多把锁
如果对象中的方法是不相干的,此时只有一个对象锁,并发度很低;
解决办法:准备多个不相干的对象锁。
将锁的粒度细分
好处:增强并发度
坏处:当一个线程需要多把锁的时候,容易出现死锁
2.死锁
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6db526cc46edcca772eaced5480d8a4b.png)
示例代码:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/04de7446bf2dc95edef0f2605832e91e.png)
检索死锁的软件:Jconsole
3.活锁
两个线程互相改变对方的结束条件,最后谁也无法结束。
4.饥饿
一个线程由于优先级太低,始终得不到CPU调度执行,也不能够结束。
在解决死锁的时候使用顺序加锁的方法,即线程获取锁的时候必须按照锁的顺序来获得,这样可以避免死锁;但是顺序加锁容易导致饥饿问题。