美文网首页
JAVA锁机制

JAVA锁机制

作者: liaowenhao | 来源:发表于2017-07-29 14:23 被阅读59次

锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).可见性就是释放锁之前的共享数据更改对随后获得锁的线程是可见的。

1 Synchronized

使用:synchronized可加在方法上,也可加在特定代码块上,括号中表示需要锁的独享
性能:托管给JVM执行,Java1.6后性能提升到与Lock差不多,官方更提倡使用。
场景:普通场景推荐使用。

2 Lock

使用:通常使用ReentrantLock重入锁,显示指定起始位置和终止位置。加锁和解锁处使用lock()unlock()方法,一般在finally块中写unlock()防止死锁。
性能:用JAVA写的控制锁代码
场景:复杂同步应用推荐自定义使用。比如中断线程控制权,自定义wait-nitify线程,公平锁等。
实现:Lock接口的实现基本都是通过聚合了一个队列同步器的子类来完成线程访问控制的。
区别:ReentantLock表现为API层面的互斥锁,synchronized表现为原生语法层面的互斥锁。
优点:Lock提供了synchronized关键字不具备的主要特性:
1.尝试非阻塞地获取锁;
2.能被中断地获取锁;
3.超时获取锁。

独占锁:同一时间只有一个线程获取锁。再有线程尝试加锁,将失败。 例如reentrantLock
共享锁:同一时间可以有多个线程获取锁。例如FutureTask

3 扩展:volatile

3.1 解释
volatile用在多线程,同步变量。线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm,它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)
volatile会告知程序任何对该变量的访问均需要从共享内存中获取,而对它的改变必须同步刷新回共享内存,它能保证所有线程对变量访问的可见性。

3.2 volatile与sychronized区别
volatile是程度较轻的synchronized,具备可见性,不具备操作原子性。volatile只是在线程内存和“主”内存间同步某个变量的值,而synchronized通过锁定和解锁某个监视器同步所有变量的值,确保多个线程在同一时刻,只能由一个线程处于方法或同步块中,这保证了线程对变量访问的可见性和排他性。

volatilesynchronized的使用和执行成本更低,不会引起线程上下文的切换和调度。Volatile一般情况下不能代替sychronized,因为volatile不能保证操作的原子性,即使只是i++,实际上也是由多个原子操作组成:read i; inc; write i,假如多个线程同时执行i++,volatile只能保证他们操作的i是同一块内存,但依然可能出现写入脏数据的情况。

相关文章

  • java中同步锁机制?

    java中同步锁机制?

  • java并发编程锁机制

    之前系列文章都在叙述java线程池的设计以及实现机制,没有涉及java并发编程的锁机制,这是因为锁机制与线程池是...

  • 十一 .Java并发工具

    Java中的锁 锁是一种线程同步机制,类似同步块,但是锁比Java的同步块更复杂。锁(以及其他更高级的同步机制)是...

  • 技术Checklist

    缓存J2cache、ehcache、redis √命中率、穿透 √ JVM内存 √GC √ 锁机制java锁机制数...

  • 加锁机制--线程安全性

    加锁机制:内置锁和重入 内置锁: java提供了一种内置的锁机制来支持原子性:同步代码块(Synchronized...

  • 05.锁机制和条件对象简述

    Java的锁机制主要分内置锁(隐式锁)和显式锁。 内置锁 Java每个对象都有一个内置的锁对象,这些锁对象不需要显...

  • java锁机制

     java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开...

  • java锁机制

    场景 当多个请求同时操作数据库的时候,首先将订单状态改为已支付,在对应的金额上加上200,在同事并发场景查询条件会...

  • Java锁机制

    Java多线程编程的入门篇,主要介绍volatile修饰词、Synchronized以及Lock及其子类 多线程编...

  • JAVA锁机制

    锁提供了两种主要特性:互斥(mutual exclusion) 和可见性(visibility).可见性就是释放锁...

网友评论

      本文标题:JAVA锁机制

      本文链接:https://www.haomeiwen.com/subject/gkfclxtx.html