并发编程与日期处理技术全解析
1. 并发编程中的死锁问题
在并发编程里,死锁是一个棘手的问题。当用户数量超过资源池大小时,就可能引发死锁。例如,假设每个资源池大小为 10,10 个用户尝试使用创建操作,会获取全部 10 个数据库连接,且每个线程在获取数据库连接后、获取主存储库连接前被中断;同时,另外 10 个用户尝试使用更新操作,会获取全部 10 个主存储库连接,且每个线程在获取主存储库连接后、获取数据库连接前被中断。此时,10 个“创建”线程需等待获取主存储库连接,而 10 个“更新”线程需等待获取数据库连接,系统就会陷入死锁,无法恢复。
死锁的发生需要满足四个条件:
- 互斥条件 :多个线程需要使用相同资源,且这些资源不能同时被多个线程使用,数量也有限。像数据库连接、用于写入的文件、记录锁或信号量等都是常见例子。
- 占有并等待条件 :线程获取一个资源后,在获取其他所需资源并完成工作前不会释放该资源。
- 不可抢占条件 :一个线程不能从另一个线程那里夺取资源,只有持有资源的线程主动释放,其他线程才能获取。
- 循环等待条件 :也叫“致命拥抱”。假设有两个线程 T1 和 T2,以及两个资源 R1 和 R2,T1 持有 R1 并需要 R2,T2 持有 R2 并需要 R1,就会形成循环等待。
为避免死锁,可以从这四个条件入手:
- 打破互斥条件 :
- 使用允许同时使用的资源,如 AtomicInteger。
- 增加资源数量
超级会员免费看
订阅专栏 解锁全文
172万+

被折叠的 条评论
为什么被折叠?



