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. 【POJ】1286.Necklace of Beads

    题解 群论,我们只要找出所有的置换群的所有循环节 具体可参照算法艺术与信息学竞赛 旋转的置换有n个,每一个的循环节个数是gcd(N,i),i的范围是0到N - 1 翻转,对于奇数来说固定一个点,然后剩 ...

  2. 黑马程序员_java基础笔记(06)...集合

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

  3. HTML Input 表单校验之datatype

    凡要验证格式的元素均需绑定datatype属性,datatype可选值内置有10类,用来指定不同的验证格式. 如果还不能满足您的验证需求,可以传入自定义datatype,自定义datatype是一个非 ...

  4. sql find duplicate

    SELECT GUID, COUNT(*) FROM xx GROUP BY GUID HAVING COUNT(*) > 1; SELECT name, email, COUNT(*) FRO ...

  5. Java时间间隔问题在Android中的使用

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6606720.html 假设我们在做项目的时候,获取到了一段音频,也知道音频长度,那么我们想对音频做一些处理 ...

  6. Sting.format字符串格式化

    控制格式scanf printf 也不知道为什么=-= 越研究深层的java就越感觉它是从别的语言那抄袭来的

  7. Rob Pike:我得到的最佳编程建议

    Rob Pike:我得到的最佳编程建议 Rob Pike,目前谷歌公司最著名的软件工程师之一,曾是贝尔实验室Unix开发团队成员,Plan9操作系统开发的主要领导人,Inferno操作系统开发的主要领 ...

  8. [ 原创 ] Java基础7--Java反射机制主要提供了以下哪些功能?

    AVA反射机制主要提供了以下哪些功能? 在运行时判断一个对象所属的类 在运行时构造一个类的对象 在运行时判断一个类所具有的成员变量和方法 在运行时调用一个对象的方法

  9. [BZOJ4864][BeiJing2017Wc]神秘物质(splay)

    首先merge就是先delete两次再insert,Max就是整个区间的最大值减最小值,Min就是区间中所有相邻两数差的最小值. Splay支持区间最大值,区间最小值,区间相邻差最小值即可. #inc ...

  10. hdu 3068 Manacher算法

    题意:求最长回文串,模板题 #include<cstdio> #include<iostream> #include<algorithm> #include< ...