ReentrantLock
    重入锁,在需要进行代码同步部分上加锁,但是一定要记得解锁。
    类型:公平锁(队列方式进行排队)、非公平锁(按照cpu的分配),非公平锁性能要比公平锁性能高,默认为非公平锁。
  1. package dmeo9;
  2. import javax.security.auth.login.FailedLoginException;
  3. import java.util.concurrent.locks.Lock;
  4. import java.util.concurrent.locks.ReentrantLock;
  5. /**
  6. * Created by liudan on 2017/8/4.
  7. */
  8. public class DemoLock {
  9. private Lock lock = new ReentrantLock(false);
  10. public void m1(){
  11. try {
  12. lock.lock();
  13. System.err.println(Thread.currentThread().getName()+":线程,进入m1");
  14. Thread.sleep(3000);
  15. System.err.println(Thread.currentThread().getName()+":线程,继续执行 m1");
  16. Thread.sleep(3000);
  17. } catch (InterruptedException e) {
  18. e.printStackTrace();
  19. }finally {
  20. lock.unlock();//解锁的动作写在finally内较好,因为解锁锁程序可能会发生一些意想不到的错误,导致无法正常解锁
  21. }
  22. }
  23. public void m2(){
  24. try {
  25. lock.lock();
  26. System.err.println(Thread.currentThread().getName()+":线程,进入m2");
  27. Thread.sleep(3000);
  28. System.err.println(Thread.currentThread().getName()+":线程,继续执行 m2");
  29. Thread.sleep(2000);
  30. } catch (InterruptedException e) {
  31. e.printStackTrace();
  32. }finally {
  33. lock.unlock();
  34. }
  35. }
  36. public static void main(String[] atgs){
  37. final DemoLock demoLock = new DemoLock();
  38. Thread t1 = new Thread(new Runnable() {
  39. @Override
  40. public void run() {
  41. demoLock.m1();
  42. demoLock.m2();
  43. }
  44. },"t_00001");
  45. t1.start();
  46. }
  47. }
    输出:
  48. t_00001:线程,进入m1
    t_00001:线程,继续执行 m1
    t_00001:线程,进入m2
    t_00001:线程,继续执行 m2

21.重入锁ReentrantLock的更多相关文章

  1. synchronized关键字,Lock接口以及可重入锁ReentrantLock

    多线程环境下,必须考虑线程同步的问题,这是因为多个线程同时访问变量或者资源时会有线程争用,比如A线程读取了一个变量,B线程也读取了这个变量,然后他们同时对这个变量做了修改,写回到内存中,由于是同时做修 ...

  2. Java 重入锁 ReentrantLock 原理分析

    1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似.所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生 ...

  3. 轻松学习java可重入锁(ReentrantLock)的实现原理

    转载自https://blog.csdn.net/yanyan19880509/article/details/52345422,(做了一些补充) 前言 相信学过java的人都知道 synchroni ...

  4. java 可重入锁ReentrantLock的介绍

    一个小例子帮助理解(我们常用的synchronized也是可重入锁) 话说从前有一个村子,在这个村子中有一口水井,家家户户都需要到这口井里打水喝.由于井水有限,大家只能依次打水.为了实现家家有水喝,户 ...

  5. 轻松学习java可重入锁(ReentrantLock)的实现原理(转 图解)

    前言 相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么 ...

  6. 17_重入锁ReentrantLock

    [概述] 重入锁可以完全代替synchronized关键字. 与synchronized相比,重入锁ReentrantLock有着显示的操作过程,即开发人员必须手动指定何时加锁,何时释放锁,所以重入锁 ...

  7. Java 显示锁 之 重入锁 ReentrantLock(七)

    ReentrantLock 重入锁简介 重入锁 ReentrantLock,顾名思义,就是支持同一个线程对资源的重复加锁.另外,该锁还支持获取锁时的公平与非公平性的选择. 重入锁 ReentrantL ...

  8. 可重入锁ReentrantLock解析

    说到可重入锁,先从AQS的ConditionObject说起,AQS的内部类ConditionObject是构建显示锁条件队列的基础.之前AQS的解析没有说这个内部类,这里和ReentrantLock ...

  9. Java中可重入锁ReentrantLock原理剖析

    本文由码农网 – 吴极心原创,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 一. 概述 本文首先介绍Lock接口.ReentrantLock的类层次结构以及锁功能模板类AbstractQue ...

随机推荐

  1. 【LOJ】#2026. 「JLOI / SHOI2016」成绩比较

    题解 用\(f[i][j]\)表示考虑了前i个排名有j个人被碾压 \(f[i][j] = f[i - 1][k] \* C[k][j] \* C[N - k - 1][N - r[i] - j] \* ...

  2. 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest B - Byteland Trip dp

    B - Byteland Trip 题目大意:给你一个由'<' 和 '>'组成的串, 如果在'<' 只能前往编号比它小的任意点, 反之只能前往比它大的任意点,问你能遍历所有点 并且每 ...

  3. JSP的学习二(指令与标签)

    一:page指令 1.JSP的指令 放在<%@ 指令 属性=“值”%> 主要有page,include,tablib. 2.page指令 用于定义JSP页面的各种属性,作用于是JSP的整个 ...

  4. RTSP 资料

    分享两个不错的播客. http://blog.csdn.net/u010425035/article/details/10410851 http://blog.csdn.net/xiaoyafang1 ...

  5. 在控制台连接oracle

    Microsoft Windows [版本 6.1.7601]版权所有 (c) 2009 Microsoft Corporation.保留所有权利. C:\Users\lijt>sqlplus ...

  6. [leetcode trie]208. Implement Trie (Prefix Tree)

    实现一个字典树 class Trie(object): def __init__(self): self.root = TrieNode() def insert(self, word): cur = ...

  7. [ 原创 ]Centos 7.0下启动 Tomcat8.5.15

    1.打开8080端口  firewall-cmd --zone=public --add-port=8080/tcp --permanent 2.重启防火墙   firewall-cmd --relo ...

  8. android 消息机制,handler机制,messageQueue,looper

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha handler  就是 处理器 .  用来处理消息, 发送消息. handler   就 ...

  9. 在JSP使用EL中判断指定元素是否存在于指定集合中

    在JSP使用EL中判断指定元素是否存在于指定集合中 1.问题描述 在JSP页面中使用EL表达式判断一个指定元素是否存在于指定集合中? 2.问题解决 eg:指定集合:collection:{1,2,3, ...

  10. luoguP3185 [HNOI2007]分裂游戏 枚举 + 博弈论

    每个位置的瓶子中的每个石子是一个独立的游戏 只要计算出他们的\(sg\)值即可 至于方案数,反正不多\(n^3\)暴力枚举即可 反正怎么暴力都能过啊 复杂度\(O(Tn^3)\) #include & ...