内容简介:这是一个老生常谈的问题,但是如果仅仅是那些比较普遍的说法,我也不用记录这篇文章,今天在写两者代码的时候还有一个不容易发现到的区别点。还有一个区别是使用synchronized的线程会被block住,而ReentrantLock的线程则是进入waiting状态ReentrantLock真的比synchronized性能高吗?
这是一个老生常谈的问题,但是如果仅仅是那些比较普遍的说法,我也不用记录这篇文章,今天在写两者代码的时候还有一个不容易发现到的区别点。
常规区别
- ReentrantLock更加灵活,提供了超时获取锁,可中断锁。提供了非公平锁和非公平锁,而synchronized仅仅是非公平锁。
- 用法上,ReentrantLock必须手动释放锁,并且只能修饰代码块。而synchronized不用手动释放锁,除此之外可以修饰方法。
还有一个区别是使用synchronized的线程会被block住,而ReentrantLock的线程则是进入waiting状态
疑问点
ReentrantLock真的比synchronized性能高吗?
我写了一个简单的demo
public class LockDemo { static ReentrantLock lock = new ReentrantLock(false); public static void main(String[] args) { syncTest(); //分别测试 // lockTest(); } public static void syncTest() { for (int i = 0; i < 10; i++) { new Thread() { @Override public void run() { synchronized (lock) { System.out.println(Thread.currentThread().getName() + "开始锁定"); try { Thread.sleep(2 * 1000); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(Thread.currentThread().getName() + "解锁"); } } } }.start(); } } public static void lockTest() { for (int i = 0; i < 10; i++) { new Thread() { @Override public void run() { lock.lock(); System.out.println(Thread.currentThread().getName() + "开始锁定"); try { Thread.sleep(2 * 1000); } catch (Exception e) { e.printStackTrace(); } finally { System.out.println(Thread.currentThread().getName() + "解锁"); lock.unlock(); } } }.start(); } } } 复制代码
运行的结果如下:
Synchonized,其线程状态只有time_waiting与blocked,当获取到锁的线程执行完毕之后,其余线程会一起再次争抢锁
ReentrantLock的非公平锁测试,尽管我用的是非公平锁,但是看起来还是有公平性的。其内部线程进入的是waiting状态
至于是否性能是高点,我觉得单个线程去获取锁会比多个线程一起去抢锁性能会高一些吧,synchronized对锁做的优化也只是在单线程以及两个线程的时候做的优化,一旦升级为重量级锁,那些优化也就没有效果了。
当然这是个人猜测。
以上所述就是小编给大家介绍的《synchronized与ReentrantLock的区别》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
鳥哥的Linux私房菜(第四版)
鳥哥 / 碁峰資訊股份有限公司 / 2016-1-25 / TWD 980.00
本書前三版均蟬聯電腦專業書籍Linux暢銷排行榜Top1,為地表最暢銷的Linux中文書籍! 您是有意學習Linux的小菜鳥,卻不知如何下手?您是遨遊Linux的老鳥,想要一本資料豐富的工具書?本書絕對是最佳選擇! ※鳥哥傾囊相授,內容由淺入深 書中包含了鳥哥從完全不懂Linux到現在的所有歷程,鳥哥將這幾年來的所知所學傾囊相授,以最淺顯易懂的文字帶領您進入Linux的世界。 ......一起来看看 《鳥哥的Linux私房菜(第四版)》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
Base64 编码/解码
Base64 编码/解码