多线程-ReentrantLock
在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相关推荐
- Java 多线程 —— ReentrantLock 与 Condition
引言 ReentrantLock 是 JUC 下的一个功能强劲的锁工具,支持公平锁.非公平锁,以及多等待队列的 Condition . 也常常被称为"手动锁".本篇博客主要分析它的 ...
- 多线程---ReentrantLock
package com.test; import java.util.Collection; import java.util.concurrent.locks.Lock; import java.u ...
- Java多线程 - ReentrantLock实际开发中的应用场景
1. 公平锁,线程排序执行,防饿死应用场景 公平锁原则必须按照锁申请时间上先到先得的原则分配机制场景: 1).实现逻辑 上(包括:软件中函数计算.业务先后流程:硬件中操作实现中顺序逻辑)的顺序排队机制 ...
- 【Java】Java Controller 每次只能一个请求 多线程 ReentrantLock
1.概述 背景我有一个程序,controller中接收客户端请求,但是这个请求做的操作非常的重,而且做完一个如果再来请求必须拒绝.因为这是一个费时的操作.而且多次操作会报错. @GetMapper() ...
- 【java】java ReentrantLock 源码详解
文章目录 1.概述 2.问题 3.ReentrantLock源码分析 3.1 类的继承关系 3.2 类的内部类 3.2.1 Sync类 3.2.2 NonfairSync类 3.2.3 FairSyn ...
- RocketMQ 消息队列中丢失消息的场景举例及解决办法
既然使用在项目中使用了MQ,那么就不可避免的需要考虑消息丢失问题.在一些涉及到了金钱交易的场景下,消息丢失还是很致命的.那么在RocketMQ中存在哪几种消息丢失的场景呢? 先来一张最简单的消费流程图 ...
- java多线程系列(四)---ReentrantLock的使用
Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...
- 多线程(三)之ReentrantLock源码解析
2019独角兽企业重金招聘Python工程师标准>>> 今天分析ReentrantLock类的源码,在看源码之前,先学习AQS(AbstractQueuedSynchronizer) ...
- 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized
文章目录 sychronized释义 synchronized关键字最主要的三种使用方式: synchronized底层原理: 同步代码块: 同步方法 当前类的class对象作为锁 锁升级 Synch ...
最新文章
- Bitcoin.com支持BCH第N弹——派息神器SLP Dividend Calculator
- unslider的用法详解
- cvMinMaxLoc函数实例
- 10.线程池与连接池
- Ubuntu系统如何安装nodejs及npm
- SAP CRM Cross Component级别的跳转如果出了问题,该如何调试
- Android之编译提示error: Apostrophe not preceded by
- wsdl文件是怎么生成的_C++ 动态库.dll的生成---超级详细!!!
- linux怎么显示目录层次结构,Linux基础(层级结构、基础命令)
- VMware ESXi 6.X Syslog日志配置
- eclipse修改java热部署免重启tomcat在Host标签下增加Context直接将docBase指定为项目的WebContent路径
- Java实例---flappy-bird实例[最终版]
- 为前端工程之崛起而编程!
- kafka partition分配_【kafka】消费者对应的分配partition分区策略
- Nexus Android8 0系统拍照预览方向问题解决方法
- matlab能不能求不定积分,matlab求不定积分定积分
- 无线电波传播:频段、方式、衰落|瑞利分布、瑞利衰落非复制的解释
- SQL安全-关闭外网对1433的访问
- 电缆计算机作用,铠装计算机电缆DJYV用途
- 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法