二哥啊

导航

 

死锁:

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

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

解决方法

  专门的算法 原则

  尽量减少同步资源的定义

  尽量避免嵌套同步

 

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

实例化ReentranLock

ReentrantLock(true) 先进先出

调用lock()

调用unlock()

 

synchronized与Lock的异同

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

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

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

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

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

优先使用顺序 

Lock  同步代码块 同步方法

 

posted on 2019-11-25 14:41  二哥啊  阅读(103)  评论(0编辑  收藏  举报