线程的死锁问题
Posted ergepython
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的死锁问题相关的知识,希望对你有一定的参考价值。
死锁:
不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁
出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续
解决方法
专门的算法 原则
尽量减少同步资源的定义
尽量避免嵌套同步
解决线程安全问题的方式三:Lock锁 JDK5.0新增
实例化ReentranLock
ReentrantLock(true) 先进先出
调用lock()
调用unlock()
synchronized与Lock的异同
不同:synchronized机制在执行完相应的同步代码块以后,自动的释放同步监视器
Lock需要手动的启动同步, 手动关闭
Lock是显式锁(手动开启和关闭锁),synchronized是隐式锁,出了作用域自动释放
Lock只有代码块锁,synchronized有代码块锁和方法锁
使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。 具有更好的扩展性(提供更多的子类)
优先使用顺序
Lock 同步代码块 同步方法
以上是关于线程的死锁问题的主要内容,如果未能解决你的问题,请参考以下文章