多线程

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之间同步。 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。