在Java多线程中,可以使用synchronized关键字来实现线程之间同步互斥,但在JDK1.5中新增了ReentrantLock类也能达到同样的效果,并且在扩展功能上也更加强大,比如具有嗅探锁定、多路分支通知等功能,而且在使用上也比synchronized更加的灵活。 
调用ReentrantLock对象的lock方法获取锁,调用unlock方法释放锁。

package org.github.lujiango;import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;public class Test05 {static class Service {private Lock lock = new ReentrantLock();public void testMethod() {try {lock.lock();for (int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName() + " " + (i + 1));}} finally {lock.unlock();}}}static class MyThread extends Thread {private Service service;public MyThread(Service service) {this.service = service;}@Overridepublic void run() {service.testMethod();}}public static void main(String[] args) {Service service = new Service();MyThread t1 = new MyThread(service);MyThread t2 = new MyThread(service);MyThread t3 = new MyThread(service);MyThread t4 = new MyThread(service);MyThread t5 = new MyThread(service);t1.start();t2.start();t3.start();t4.start();t5.start();}}

  当前线程打印完毕之后将锁进行释放,其它线程才可以继续打印。线程打印的数据是分组打印的,因为当前线程已经持有锁,但线程之间打印的顺序是随机的。

转载于:https://www.cnblogs.com/lujiango/p/7580994.html

多线程-ReentrantLock相关推荐

  1. Java 多线程 —— ReentrantLock 与 Condition

    引言 ReentrantLock 是 JUC 下的一个功能强劲的锁工具,支持公平锁.非公平锁,以及多等待队列的 Condition . 也常常被称为"手动锁".本篇博客主要分析它的 ...

  2. 多线程---ReentrantLock

    package com.test; import java.util.Collection; import java.util.concurrent.locks.Lock; import java.u ...

  3. Java多线程 - ReentrantLock实际开发中的应用场景

    1. 公平锁,线程排序执行,防饿死应用场景 公平锁原则必须按照锁申请时间上先到先得的原则分配机制场景: 1).实现逻辑 上(包括:软件中函数计算.业务先后流程:硬件中操作实现中顺序逻辑)的顺序排队机制 ...

  4. 【Java】Java Controller 每次只能一个请求 多线程 ReentrantLock

    1.概述 背景我有一个程序,controller中接收客户端请求,但是这个请求做的操作非常的重,而且做完一个如果再来请求必须拒绝.因为这是一个费时的操作.而且多次操作会报错. @GetMapper() ...

  5. 【java】java ReentrantLock 源码详解

    文章目录 1.概述 2.问题 3.ReentrantLock源码分析 3.1 类的继承关系 3.2 类的内部类 3.2.1 Sync类 3.2.2 NonfairSync类 3.2.3 FairSyn ...

  6. RocketMQ 消息队列中丢失消息的场景举例及解决办法

    既然使用在项目中使用了MQ,那么就不可避免的需要考虑消息丢失问题.在一些涉及到了金钱交易的场景下,消息丢失还是很致命的.那么在RocketMQ中存在哪几种消息丢失的场景呢? 先来一张最简单的消费流程图 ...

  7. java多线程系列(四)---ReentrantLock的使用

    Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...

  8. 多线程(三)之ReentrantLock源码解析

    2019独角兽企业重金招聘Python工程师标准>>> 今天分析ReentrantLock类的源码,在看源码之前,先学习AQS(AbstractQueuedSynchronizer) ...

  9. 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized

    文章目录 sychronized释义 synchronized关键字最主要的三种使用方式: synchronized底层原理: 同步代码块: 同步方法 当前类的class对象作为锁 锁升级 Synch ...

最新文章

  1. Bitcoin.com支持BCH第N弹——派息神器SLP Dividend Calculator
  2. unslider的用法详解
  3. cvMinMaxLoc函数实例
  4. 10.线程池与连接池
  5. Ubuntu系统如何安装nodejs及npm
  6. SAP CRM Cross Component级别的跳转如果出了问题,该如何调试
  7. Android之编译提示error: Apostrophe not preceded by
  8. wsdl文件是怎么生成的_C++ 动态库.dll的生成---超级详细!!!
  9. linux怎么显示目录层次结构,Linux基础(层级结构、基础命令)
  10. VMware ESXi 6.X Syslog日志配置
  11. eclipse修改java热部署免重启tomcat在Host标签下增加Context直接将docBase指定为项目的WebContent路径
  12. Java实例---flappy-bird实例[最终版]
  13. 为前端工程之崛起而编程!
  14. kafka partition分配_【kafka】消费者对应的分配partition分区策略
  15. Nexus Android8 0系统拍照预览方向问题解决方法
  16. matlab能不能求不定积分,matlab求不定积分定积分
  17. 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
  18. SQL安全-关闭外网对1433的访问
  19. 电缆计算机作用,铠装计算机电缆DJYV用途
  20. 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法

热门文章

  1. 写出好代码系列 工程思维
  2. bootstrap inputfile.js
  3. shiro、cas、pac4j 实现单点登陆
  4. JVM优化系列-JVM内存溢出的原因
  5. 默纳克系统服务器怎么看抱闸,默纳克抱闸制动力检测怎么关闭
  6. Linux Shell通过fifo实现多进程并发以及并发数控制
  7. 再谈strncpy函数--值得一看的好文章
  8. IO复用之select、poll、epoll模型
  9. Java会话技术之 —— Spring Session
  10. netty搭建简单的文件服务器