线程死锁发生的原因及解决方案
原因
为了资源的数据安全,通常情况下资源只能由一个线程去访问,不能同时让多个线程去访问,使得对资源的访问变成互斥
线程拿到资源A之后,只有在任务执行完毕之后才释放对该资源的持有,
但是若是线程在任务未执行完成之前又去请求获取其他资源B,而此刻其他线程有对B资源的持有,又想要获取A资源
于是:你等我,我的你,变成了死锁
做法
- 设置执行线程任务Future对象的超时时间
- 设置同步加锁对象的ReentrantLock 的超时时间
- io操作时,如socket连接的超时时间
- jconsole 去检测死锁
废话短说