0
点赞
收藏
分享

微信扫一扫

线程死锁及解决方案

金刚豆 2022-02-23 阅读 70
javaredis

线程死锁的四个必要条件

如果在一个系统中以下四个条件同时成立,那么就能引起死锁:

  1. 互斥性:线程对资源的占有是排他性的,一个资源只能被一个线程占有,直到释放。
  2. 请求和保持条件:一个线程对请求被占有资源发生阻塞时,对已经获得的资源不释放。
  3. 不剥夺:一个线程在释放资源之前,其他的线程无法剥夺占用。
  4. 循环等待:发生死锁时,线程进入死循环,永久阻塞。

解决方法:

  1. 互斥性,可用ThreadLocal
  2. 请求和保持条件,踢掉一个(结束一个)
  3. 不剥夺,trylcok,加个超时时间,抢不到释放资源

分布式锁,可以用DB,redis的nx实现分布式锁

DB分布式锁
1、根据业务字段生成transaction_id,并线程安全的创建锁资源
2、根据transaction_id申请锁
3、释放锁

举报

相关推荐

0 条评论