一步一步学多线程-Synchronized和ReetrantLock区别

实现方式

         Lock是代码级别的,synchronized是JVM级别的

公平

         Lock可以是公平所,也可以是不公平锁,默认是非公平锁,synchronized是非公平锁

释放

         Lock的释放必须手动调用unlock()方法,而synchronized在代码出了代码块或方法之后就会自动释放锁。

等待中断

         Lock中如果持有锁的线程长期不释放的时候,正在等待的线程可以选择放弃等待,但是synchroinzed不会

条件变量  

         Lock中可以有多个Condition来实现线程间通信,而synchronized是能通过当前锁来进行线程通信。

 

什么时候选择用ReetrantLock代替Synchronized

1、    在确实需要一些synchronized锁没有的特性的时候,比如时间锁等候、可中断锁等候、无块结构锁、多个条件变量或者锁投票的时候

2、    优先推荐synchronized开发,如果事实证明synchronized确实不合适,再用ReetrantLock开发。

posted @ 2017-08-21 11:13 一步一步学 阅读(...) 评论(...) 编辑 收藏