码迷,mamicode.com
首页 > 编程语言 > 详细

多线程

时间:2015-02-15 14:53:32      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

synchronized、lock和Atomic的区别:

synchronized:
synchronized是在JVM层面上实现的,不但可以通过一些监控工具监控synchronized的锁定,而且在代码执行时出现异常,JVM会自动释放锁定;
在资源竞争不是很激烈的情况下,偶尔会有同步的情形下,synchronized是很合适的。原因在于,编译程序通常会尽可能的进行优化synchronize;

ReentrantLock: 
lock是通过代码实现的,要保证锁定一定会被释放,就必须将unLock()放到finally{}中;
ReentrantLock提供了多样化的同步,它是有时间限制的同步,是可以被Interrupt的同步(synchronized的同步是不能Interrupt的)等;
在资源竞争不激烈的情形下,性能稍微比synchronized差点。但是当同步非常激烈的时候,synchronized的性能一下子能下降好几十倍。而ReentrantLock却还能维持常态; 

Atomic: 
和上面的类似,不激烈情况下,性能比synchronized略逊,而激烈的时候,也能维持常态。激烈的时候,Atomic的性能会优于ReentrantLock一倍左右。
但是其有一个缺点,就是只能同步一个值,一段代码中只能出现一个Atomic的变量,多于一个同步无效。因为他不能在多个Atomic之间同步。 

多线程

标签:

原文地址:http://www.cnblogs.com/xianDan/p/4292867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!