JUC学习笔记(1)—ReentrantLock

JUC源码学习笔记1——AQS和ReentrantLock 一丶Lock 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁可以防止多个线程同时访问共享资源(这种锁称为独占锁,排他锁)但是有些锁可以允许多个线程并发访问共享资源,比如读写锁 3.使用Lock的经典范式 获取锁的过程不要写在try中,避免获取锁失败最后finally释放其他线程持有的锁使用一个int成员变量state表示同步状态,内置的FIFO队列来完成资源的获取和线程的排队工作,支持独占也支持共享的获取同步状态。三个变量被volatile修饰,保证其线程可见性等待状态是一个枚举,具备下列可选的值 阅读详情
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;


class Ticket//资源类  类  = 实例变量+实例方法
{
	private int number = 30;
	
	//Lock implementations provide more extensive locking operations
	//than can be obtained using synchronized methods and statements. 
	private Lock lock = new ReentrantLock();	//List list = new ArrayList();
	
	public void sale()
	{
		lock.lock();
		try
		{
			if(number > 0)
			{
				System.out.println(Thread.currentThread().getName()+"\t 卖出第:"+(number--)+"\t 还剩下: "+number);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
}

/**
 * 第一个case
 * @Description: 卖票程序复习线程知识 ,三个售票员			卖出			30张票
 * @author zzyy
 * @date 2018年3月15日
 * 1 多线程编写套路------上
 * 		1.1	线程		操作(实例方法)		资源类
 * 		1.2  高内聚  低耦合
 */
public class SaleTicket
{
	public static void main(String[] args)
	{
		Ticket ticket = new Ticket();
		
		//Thread(Runnable target, String name) 	Allocates a new Thread object.		
		
		new Thread(() -> { for (int i = 1; i <=40; i++) 	ticket.sale(); }, "AA").start();
		new Thread(() -> { for (int i = 1; i <=40; i++) 	ticket.sale(); }, "BB").start();
		new Thread(() -> { for (int i = 1; i <=40; i++) 	ticket.sale(); }, "CC").start();
		
		new Thread(() -> {  for (int i = 1; i <=40; i++) ticket.sale();}   , "your thread name") .start();
		
		
		/*new Thread(new Runnable() {
			@Override
			public void run()
			{
				for (int i = 1; i <=40; i++) 
				{
					ticket.sale();
				}
			}
		}, "AA").start();
		new Thread(new Runnable() {
			@Override
			public void run()
			{
				for (int i = 1; i <=40; i++) 
				{
					ticket.sale();
				}
			}
		}, "BB").start();
		new Thread(new Runnable() {
			@Override
			public void run()
			{
				for (int i = 1; i <=40; i++) 
				{
					ticket.sale();
				}
			}
		}, "CC").start();		*/
		
	}
}

//1 class MyThread implements Runnable

//2 匿名内部类

//3 lambda Express

 

【Java之多线程】JUC常见知识点全面总结_juc 考点 大部分情况下使用就足够了锁竞争激烈的时候,使用, 搭配trylock方法可以更灵活地控制加锁的行为,而不是死等。如果需要使用公平锁, 使用信号量Semaphore一般用来表示可用资源的个数,相当于一个计数器,可类比生活中停车场牌子上面显示的停车场剩余车位数量。当有车开进去的时候, 就相当于申请一个可用资源,可用车位就 -1 (这个称为信号量的 P 操作)当有车开出来的时候, 就相当于释放一个可用资源, 可用车位就 +1 (这个称为信号量的 V 操作) 阅读详情

相关推荐

JUC中的 ReentrantLock

上一篇: 从Java线程到kotlin协程之java.util.concurrent.locks包中的接口和实现类 ReentrantLock (重入锁) 重入锁就是可以多次上锁,实现了Lock接口 跟synchronized不同,synchronized是自动上锁,自动解锁的,而Lock接口的实现类是需要手动上锁,手动解锁。 先看一下ReentrantLock中的方法,常用的其实就是对Lock接口实现的方法。 我们先来简单用一用,还是之前买票的例子: lock() 获取锁,如果锁被其他线程持有,则处于阻

喻志强的博客 516

阿尔达H-30T焊台评测:恒温控制与细节设计解析

恒温焊台作为电子维修的核心工具,其温度控制精度直接影响焊接质量。通过PID算法实现的闭环温控系统,能维持±5℃的波动范围,确保焊点可靠性。在SMT贴片焊接等场景中,快速回温功能可避免焊盘虚焊,而复合镀层技术则延长了烙铁头使用寿命。本文以阿尔达H-30T为例,实测其0.3秒回温速度和智能休眠功能,对比展示国产焊台在温度稳定性(±5℃)和人体工学设计(36mm手柄)上的技术突破,为电子爱好者提供高性价比工具选择。

weixin_34189116的博客 382

JUC学习 - ReentrantLock

一、JUC中ReentrantLock 1、synchronized的局限性 synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁由jvm实现,用户不需要显示的释放锁,非常方便,然而synchronized也有一定的局限性,例如: 当线程尝试获取锁的时候,如果获取不到锁会一直阻塞,这个阻塞的过程,用户无法控制 如果获取锁的线程进入休眠或者阻塞,除非当前线程异常,否则其他线程尝试获取锁必须一直等待 JDK1.5之后发布,加入了Doug Lea实

TyuIn的博客 575

java中ReentrantLock彻底解决并发线程的无限等待

ReentrantLock彻底解决并发线程的无限等待 马 克-to-win:上面的例子,只能做到根据请求Synchronized方法的队列里的线程的数量,决定我是否进入队列等待。但是一旦决定了等待,进入 了等待队列以后,就无法退出队列。想达到这个效果,必须要用到ReentrantLock的技术。ReentrantLock翻译成中文就是可重入锁。下面这段话比较难,新手可忽略。和可重入锁相对的就是不可...

mark_to_win的专栏 1262

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

数字IC后端PR阶段Innovus,ICC,ICC2修复short万能脚本分享

weixin_37584728的博客 3457

用Unity Wheel Collider做坦克转向?3步实现履带式载具物理效果

本文详细解析了如何利用Unity的Wheel Collider组件实现履带式载具的差速转向物理效果。通过思维转换、场景搭建和核心代码实现三步,将Wheel Collider从模拟轮式车辆转向改造为控制履带扭矩差的系统,并深入探讨了参数调试与真实感提升的方法,帮助开发者打造物理反馈扎实的坦克或特种车辆模拟。

weixin_29009971的博客 223

ReentrantLock(漂亮简洁的思维导图)

一个平平无奇又漂亮又简洁的 ReentrantLock 思维导图罢了。 梳理了相关资料和源码分析之后做的笔记,适用于基础了解、查漏补缺、加深记忆。

灰色童话 238

数学不好是原罪——高等数学笔记(汇总版)

这是本人之前考研的高数手写笔记,工科学硕数一考了146(满分150),笔记有一定参考价值,欢迎大家收藏借鉴。

xuuyann 5万+

JUC-LOCK接口

Synchronized 1、多线程编程模版上 (1)线程 操作 资源类 (2)高内聚低耦合 2、实现步骤 (1)创建资源类 (2)资源类里创建同步方法,同步代码块 3、例子:卖票 LOCK 接口 锁实现提供了比使用同步方法和语句可以获得的更广泛的锁操作。它们允许更灵活的结构,可能具有非常不同的属性,并且可能支持多个关联的条件对象。 1、Lock接口的实现 Re...

weixin_30922589的博客 192

ESP32之 ESP-IDF + Clion 开发环境搭建(二)—— Linux版

本文介绍了 Linux 下,使用Clion IDE 用官方 ESP-IDF 开发包进行 ESP32 开发的环境搭建

Augtons 的博客 6098

Power BI实战:从数据清洗到可视化报表的完整流程

本文详细介绍了使用Power BI进行数据分析的完整流程,从数据获取、清洗整理到建模与可视化。通过实战案例,重点讲解了连接MySQL数据库、使用Power Query进行数据清洗、利用DAX创建核心度量值以及设计交互式报表的关键步骤与技巧,帮助用户高效完成从原始数据到专业可视化报表的转化,实现数据驱动决策。

weixin_29070721的博客 398

狂神JUC——Lock版生产者和消费者

package com.company; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 消费者和生产者:线程之间的通信问题 * 等待唤醒,通知唤醒 * 不同的线程操作同一个变量 */ public class JUC_ProducerAndConsumer {

黄坤的博客 628

CNN经典论文(一)LeNet

Gradient-Based Learning Applied to Document Recognition(梯度学习在文档识别中的应用) Yann LeCun, Leon Bottou, Yoshua Bengio, and Patrick Haffner 发表时间:December 1998 期刊:Proceedings of the IEEE 影响:世界上第一个卷积神经网络 论文地址:Gradient-Based Learning Applied to Document Recognition

loveling丶的博客 3597

【JUC基础学习笔记】

JUC基础学习笔记一、JUC概述1. JUC是什么2. 进程与线程3. 并发与并行4. sleep() 和 wait()等方法二、Lock1. Synchronized2. Lock接口与方法3. 两者异同4. Lock接口重要实现类三、线程通信 / 线程同步1. Synchronized同步块2. Lock锁四、线程安全1. 阻塞同步2. 非阻塞同步3. 非同步五、集合的线程安全1. 并发集合 ArrayList2. Vector3. Collections4. JUC.CopyOnWriteList..

sixteen_16的博客 1万+

深度学习实战:基于YOLOv5/v8/v10的快递暴力分拣检测系统(完整版)

在电商物流高速发展的今天,快递包裹日均处理量已突破亿件级别。然而,快递分拣过程中的暴力抛扔行为不仅造成包裹损坏,更带来巨大的经济损失。据统计,每年因暴力分拣导致的快递破损投诉占总投诉量的30%以上。传统的人工监控方式存在疲劳、疏漏等问题,因此开发一套智能化的快递暴力分拣检测系统具有重要的现实意义。

YOLO 275

猫群优化算法(CSO)详解:从生物灵感到智能优化

猫群优化算法(CSO)是一种模拟猫科动物行为的群体智能优化算法。该算法基于猫的两种主要行为模式:搜寻状态(全局探索)和跟踪状态(局部开发)。CSO通过混合率(MR)动态调整两种模式的比例,实现探索与开发的平衡。算法核心包括搜寻模式的变异操作和跟踪模式的速度-位移模型,具有收敛性能好、全局搜索能力强等特点。相比传统优化算法,CSO在高维复杂问题中表现优异,已成功应用于函数优化、图像处理等多个领域。算法性能受混合率、变化域等参数影响,自适应参数策略可进一步提升优化效果。

qq_42212808的博客 618

JUC-ReentrantLock锁基础篇

ReentrantLock是一种可重入的独占锁(互斥锁)。 独占锁: 一个线程获取()了这把锁,其他的线程则不能获取。 可重入:指的是线程A获取了这把锁,在线程A释放锁之前,线程A本身可以继续来获取这把锁。比如线程A调了了lock()方法获取了这把锁,在线程A调用unlock()方法之前,线程A本身继续调用lock()方法并不会阻塞住。重入锁的设计目的是为了解决死锁的问题。 ReentrantLock常常与Synchronized做对比,它们之间的对比如下:ReentrantLock提供的一些常用的方法有:

zqj1172102457的博客 685

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

JUC ReentrantLock与ReentrantReadWriteLock

重入锁 JUC中的重入锁ReentrantLock建立在AQS之上,其内部类Sync继承AQS,并实现其抽象方法,以完成可重入特性。实现可重入锁的需要注意的是:线程已经成功获取到锁才可重入;线程重入n次之后,历经释放n次,其他线程可以请求并获取到锁。在JUC重入锁的设计中提供了公平与非公平锁两种实现。其区别主要在于获取锁的顺序(公平锁有序),由于公平锁的有序性可能引起上下文切换,所以公平锁的吞吐...

Song_Russell的博客 367

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【并发编程】JUC并发编程(彻底搞懂JUC)

JUC实际上就是我们对于jdk中java.util .concurrent 工具包的简称,其结构如下:这个包下都是Java处理线程相关的类,自jdk1.5后出现。目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!JUC主要是指JDK8中java.util.concurrent里提供的一系列线程并发工具,但是线程并发的问题远不止几个工具这么简单。要学习工具使用,更要能深入理解工具的原理以及处理线程并发问题的思路。

DreamSun的博客 7613

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

JUC之ReentrantLock

JUC之ReentrantLock 引言 承接上篇JUC之AbstractQueuedSynchronizer 我们分析一下最常用的锁 ReentrantLock,即可重入锁。 上篇我们分析了aqs的acquire方法和release方法。接下来我们分析ReentrantLock是如何通过aqs实现锁的。 Lock 先看一下锁的定义。 public interface Lock { /*...

jackllvv的博客 436

JUC详细介绍涵盖AQS、ReentrantLock、ReentrantReadWriteLock、CountDownLatch等各种常用锁分析

JUC介绍

s.lm的博客 530

JUC-ReentrantLock

ReentrantLock的功能详解与理解AQS、ReentrantLockd概述、加锁流程、可重入原理、可打断原理、公平锁原理、条件变量实现原理

子悠のziyou 918

JUC之ReentrantLock解读

ReentrantLock简介 ReentrantLock是可重入锁的实现,可重入锁的含义是:如果已经拥有锁的线程再次获取锁时会立即响应成功,这点可以使用isHeldByCurrentThread和getHoldCount方法来检验。ReentrantLock可重入互斥锁具有同synchronized的隐式监视器锁相同的基本行为和语义,但是其更具有扩展能力。 ReentrantLock提供公平锁和非公平锁的特性,如果设置为公平锁,那么锁倾向于访问等待时间最长的线程;如果是非公平锁,那便不会保证任何特定的访问

相逢一笑 593

JavaEE初阶 CAS,JUC的一些简单理解,包含concurrent, ReentrantLock,Semaphore以及ConcurrentHashMap

JUC的一些简单理解

qiuqiushuibx的博客 1031

JUC学习笔记-----ReentrantLock

ReentrantLock原理分析:本文详细解析了Java中ReentrantLock的实现机制。1)非公平锁实现:通过CAS操作竞争锁,失败后进入AQS队列自旋等待,包括加锁失败流程、解锁竞争流程和可重入原理;2)公平锁实现:在获取锁前会检查等待队列;3)条件变量实现:通过ConditionObject维护等待队列,实现await/signal机制。文章还分析了可打断与不可打断模式的区别,以及线程在等待过程中被中断的处理逻辑。整个实现基于AQS框架,通过state变量控制锁状态,使用Node队列管理等待线

2301_80860862的博客 1458
上一篇: Netty3.x用户指南翻译(1)
下一篇: JUC学习笔记(2)—线程间通信
木木那年
博客等级 码龄12年 37粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值