线程的死锁问题

Posted ergepython

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程的死锁问题相关的知识,希望对你有一定的参考价值。

死锁:

  不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃自己需要的同步资源,就形成了线程的死锁

  出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续

解决方法

  专门的算法 原则

  尽量减少同步资源的定义

  尽量避免嵌套同步

 

解决线程安全问题的方式三:Lock锁  JDK5.0新增

实例化ReentranLock

ReentrantLock(true) 先进先出

调用lock()

调用unlock()

 

synchronized与Lock的异同

不同:synchronized机制在执行完相应的同步代码块以后,自动的释放同步监视器

  Lock需要手动的启动同步, 手动关闭

Lock是显式锁(手动开启和关闭锁),synchronized是隐式锁,出了作用域自动释放

Lock只有代码块锁,synchronized有代码块锁和方法锁

使用Lock锁,JVM将花费较少的时间来调度线程,性能更好。 具有更好的扩展性(提供更多的子类)

优先使用顺序 

Lock  同步代码块 同步方法

 

以上是关于线程的死锁问题的主要内容,如果未能解决你的问题,请参考以下文章

一个多线程死锁案例,如何避免及解决死锁问题?

java多线程死锁及死锁问题排查

[锁] 线程死锁解析

多线程编程之线程死锁问题

Java中线程死锁问题

Linux下面 多线程死锁问题的调试