ReentrantLock使用示例】的更多相关文章

/** * ReentrantLock是独占锁 * Lock锁的使用,把锁和要用锁同步的代码放在一起,这里就是放在Printer类中了 * 获取到锁后,最后要在finally代码块中手动释放锁 */ public class LockTest { public static void main(String[] args) { Printer printer = new LockTest().new Printer(); new Thread() { @Override public void…
先来看一段代码,实现如下打印效果: 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…
一.简介. ReentrantLock 是一个互斥锁,在基本行为和机制上与synchonized一样,只不过synchonized用方法和声明访问了隐式的锁监视器,但是ReentrantLock 做了功能上的扩展.ReentrantLock 被最后一个成功lock,但是还没unlock的线程拥有.当锁不被其他线程拥有,一个线程会成功的申请锁资源并立即返回.如果当前线程已经拥有了锁,再申请时也会立即返回.通过调用方法isHeldByCurrentThread()获取是否当前线程获得了锁,getHo…
[Java并发编程实战]-----“J.U.C”:ReentrantLock之一简介 ReentrantLock介绍 ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”. 顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有:而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取.ReentrantLock分为“公平锁”和“非公平锁”.它们的区别体现在获取锁的机制上是否公平.“锁”是为了保护竞争资源,防止多个线程同时操作线程而出错,Reentr…
目录 1 ReentrantLock与synchronized对比 2.示例用法 2.1 基本用法 2.2 尝试锁 2.3 可打断 2.4 公平锁 1 ReentrantLock与synchronized对比 ReentrantLock与synchronized都是为了同步加锁,但ReentrantLock相对效率比synchronized高,量级较轻. synchronized在JDK1.5版本开始,尝试优化.到JDK1.7版本后,优化效率已经非常好了.在绝对效率上,不比reentrantLo…
(一)可重入性 可重入性描述这样的一个问题:一个线程在持有一个锁的时候,它内部能否再次(多次)申请该锁.如果一个线程已经获得了锁,其内部还可以多次申请该锁成功.那么我们就称该锁为可重入锁.通过以下伪代码说明: void methodA(){ lock.lock(); // 获取锁 methodB(); lock.unlock() // 释放锁 } void methodB(){ lock.lock(); // 获取锁 // 其他业务 lock.unlock();// 释放锁 } 可重入锁可以理解…
一.ReentrantLock与AQS简介 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:ReentrantLock.ReentrantLock并不是一种替代内置加锁的方法,而是作为一种可选择的高级功能.ReentrantLock实现了Lock接口,提供了一种无条件的.可轮询的.定时的以及可中断的锁获取操作,所有加锁和解锁方法都是显式的. 我们基本不会直接使用AQS,AQS是一个构建锁和同步器的框架,…
概要 本章对“公平锁”的获取锁机制进行介绍(本文的公平锁指的是互斥锁的公平锁),内容包括:基本概念ReentrantLock数据结构参考代码获取公平锁(基于JDK1.7.0_40)一. tryAcquire()二. addWaiter()三. acquireQueued()四. selfInterrupt()“公平锁”的释放锁的机制在后面一章再做介绍,锁的使用示例请参考“Java多线程系列--“JUC锁”02之 互斥锁ReentrantLock”. 转载请注明出处:http://www.cnbl…
https://www.cnblogs.com/RunForLove/p/5543545.html 先来看一段代码,实现如下打印效果: 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…
一.Lock的出现 Lock的主要作用实现线程之间的同步互斥,与synchronized关键字的效果是一样的,synchronized是Java语言内置的特性,那么为什么又出现了Lock呢?原因是synchronized不是完美的,那么synchronized的缺陷在哪里呢? ①.通过synchronized实现同步,如果多个线程都只是进行读操作,所以当一个线程在进行读操作时,其他线程只能等待无法进行读操作. ②.通过synchronized实现同步的时候,无法知道线程是否获取到了锁. 为了弥补…