synchronized、ReentrantLock、volatile】的更多相关文章

系列一讲解了多线程,本章讲解多线程开发中经常使用到的3个关键字synchronized.ReentrantLock.volatile. 一.synchronized 互斥锁,即操作互斥,并发线程过来,串行获得锁,串行执行代码.就像一个房间一把钥匙,一个人进去后,下一个人得等第一个人出来得到钥匙才能进入.如果代码写的不好(A),可能出现死锁!(A得到锁,B等待A释放锁,A不释放,B死锁) 示例代码: //修饰静态方法:类级别互斥(只要是房子此方法就互斥) public synchronized s…
名词解释 synchronized 是Java中的关键字,是一种同步锁,可以修饰代码块,方法,静态的方法,类.synchronized(Object) 不能用String常量.Integer. Long. ReentrantLock 是一种同步锁,可以实现公平锁机制,获取锁和释放锁都需要手动操作. volatile 是Java中的关键字,保障可见性,有序性,并不能保证原子性. 可见性 当线程t1开始运行的时候,会把running值从内存中读到t1线程的工作区,在运行过程中直接使用这个copy,并…
先来看一段代码,实现如下打印效果: 1 2 A 3 4 B 5 6 C 7 8 D 9 10 E 11 12 F 13 14 G 15 16 H 17 18 I 19 20 J 21 22 K 23 24 L 25 26 M 27 28 N 29 30 O 31 32 P 33 34 Q 35 36 R 37 38 S 39 40 T 41 42 U 43 44 V 45 46 W 47 48 X 49 50 Y 51 52 Z  package test; import java.util.c…
目录 1.synchronized同步锁 2.ReentrantLock重入锁 3.ReadWriteLock读写锁 4.StampedLock戳锁(目前没找到合适的名字,先这么叫吧...) 5.总结 =======正文分割线========== 为了更好的支持并发程序,JDK内部提供了多种锁.本文总结4种锁. 1.synchronized同步锁 使用: synchronized本质上就2种锁: 1.锁同步代码块 2.锁方法 可用object.wait() object.notify()来操作线…
为了更好的支持并发程序,JDK内部提供了多种锁.本文总结4种锁. 1.synchronized同步锁 使用: synchronized本质上就2种锁: 1.锁同步代码块 2.锁方法 可用object.wait() object.notify()来操作线程等待唤醒 原理:synchronized细节的描述传送门:jdk源码剖析三:锁Synchronized 性能和建议:JDK6之后,在并发量不是特别大的情况下,性能中等且稳定.建议新手使用. 2.ReentrantLock可重入锁(Lock接口)…
1.reentrantLock java.util.concurrent.lock 中的Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现.这就为Lock 的多种实现留下了空间,各种实现可能有不同的调度算法.性能特性或者锁定语义.         ReentrantLock 类实现了Lock ,它拥有与synchronized 相同的并发性和内存语义,但是添加了类似锁投票.定时锁等候和可中断锁等候的一些特性.此外,它还提供了在激烈争用情况下更佳的性能…
synchronized:同步锁,是java内置的关键字.当一个线程A执行到被synchronized修饰的方法时,其他线程B如果也要执行这个方法,那么B只能等A执行完方法释放锁后才能获取资源锁执行synchronized方法块. synchronized释放锁的情况 1,执行完改代码块,释放锁 2,执行时发生异常,jvm自动释放 lock:是一个类,通过这个类可以实现同步访问 lock和synchronized最大不同点.lock释放锁需要手动释放,如果没有手动释放则会导致死锁的现象 而syn…
本文内容主要总结自<Java并发编程的艺术>第5章——Java中的锁. 一.AQS AbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架.该类主要包括: 1.模式,分为共享和独占. 2.volatile int state,用来表示锁的状态. 3.FIFO双向队列,用来维护等待获取锁的线程. AQS部分代码及说明如下: public abstract class AbstractQueuedSynchronizer extend…
本文内容主要总结自<Java并发编程的艺术>第5章——Java中的锁. 一.AQS AbstractQueuedSynchronizer(简称AQS),队列同步器,是用来构建锁或者其他同步组建的基础框架.该类主要包括: 1.模式,分为共享和独占. 2.volatile int state,用来表示锁的状态. 3.FIFO双向队列,用来维护等待获取锁的线程. AQS部分代码及说明如下: public abstract class AbstractQueuedSynchronizer extend…
Lock Lock相比于synchronized具有更强大的功能,在jdk1.6之前,锁竞争激烈的情况下使用lock的实现类ReentrantLock甚至比synchronized具有更好的性能,1.6之后oracle对synchronized进行了优化,如今的jdk1.8中两者性能不相伯仲.一个工具类,没有使用机器指令,没有编译器的特殊优化,却具有和jvm层实现的关键字一样甚至更好的效率与更强大的功能. ReentrantLock 可重入锁是Lock接口的一个重要实现类.所谓可重入锁即线程在执…