JUC学习笔记(4)—多线程之间按顺序调用

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

多线程之间按顺序调用,实现A->B->C 三个线程启动,要求如下:
AA打印5次,BB打印10次,CC打印15次   接着 AA打印5次,BB打印10次,CC打印15次    。来10轮  

 

public class ThreadOrderAccess
{
	public static void main(String[] args)
	{
		ShareResource sr = new ShareResource();
		
		new Thread(() -> {
			for (int i = 1; i <=10; i++) 
			{
				sr.print5(i);
			}
		}, "AA").start();
		
		new Thread(() -> {
			for (int i = 1; i <=10; i++) 
			{
				sr.print10(i);
			}
		}, "BB").start();		
		
		new Thread(() -> {
			for (int i = 1; i <=10; i++) 
			{
				sr.print15(i);
			}
		}, "CC").start();		
		
	}
}

class ShareResource
{
	private int number = 1;//1 - A   2 - B 3 - C.....
	private Lock lock  = new ReentrantLock();
	private Condition c1 = lock.newCondition();
	private Condition c2 = lock.newCondition();
	private Condition c3 = lock.newCondition();
	
	public void print5(int totalLoop)
	{
		lock.lock();
		try 
		{
			//1 判断
			while(number != 1)
			{
				c1.await();
			}
			//2 干活
			for (int i = 1; i <=5; i++) 
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i+"\t totalLoop:"+totalLoop);
			}
			//3 通知
			number = 2;
			c2.signal();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}
	
	public void print10(int totalLoop)
	{
		lock.lock();
		try 
		{
			//1 判断
			while(number != 2)
			{
				c2.await();
			}
			//2 干活
			for (int i = 1; i <=10; i++) 
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i+"\t totalLoop:"+totalLoop);
			}
			//3 通知
			number = 3;
			c3.signal();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}	
	public void print15(int totalLoop)
	{
		lock.lock();
		try 
		{
			//1 判断
			while(number != 3)
			{
				c3.await();
			}
			//2 干活
			for (int i = 1; i <=15; i++) 
			{
				System.out.println(Thread.currentThread().getName()+"\t"+i+"\t totalLoop:"+totalLoop);
			}
			//3 通知
			number = 1;
			c1.signal();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			lock.unlock();
		}
	}	
	
}

 

JUC高并发编程从入门到精通(全) 目录前言 前言 在了解这部分内容的时候 先要了解java的一些基础内容 java零基础从入门到精通(全) javaSE从入门到精通(全) 所谓JUC是java.util .concurrent 工具包的简称这是一个处理线程的工具包可以实现多线程高并发的内容 了解该部分内容先了解线程与进程的相关概念 【操作系统】线程与进程的深入剖析(全) java之Thread类详细分析(全) 以及涉及到的lambda表达式函数的概念 java中lambda表达式 ...... 阅读详情

相关推荐

java多线程模拟扑克牌的发放

使用java多线程来模拟扑克牌的随机顺序,并按顺序发放给四名扑克牌友。

多个线程之间按顺序调用。实现A -> B -> C 三个线程打印A打印5次,B打印10次,C打印15次 重复10次

package test; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /* 多个线程之间按顺序调用。实现A -> B -> C 三个线程打印 * A打印5...

that summer 775

数控弯管机xyz转换ybc的算法_花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...

在弯管机加工中,由管子模型生成可直接进行弯管加工的YBC数据可以大大提高弯管编程过程.传统的做法是先用dxf数据文件(用autocad绘制管子的轴心线数据)转出XYZ数据,然后由XYZ数据转成YBC数据,而且大部分厂家对文件版本以及软件做管方式都有不少限制,这大大花费了用户的时间跟精力.随着企业的信息化管理以及不断的技术升级,传统用autocad线条模式来描述管子的方式正在被用户用PRO/E,UG...

weixin_29065959的博客 1963

多线程之间按顺序调用,实现A->B->C 要求如下:AA打印5次,BB打印10次,CC打印15次 ,接着AA打印5次,BB打印10次,CC打印15次,来10轮

m0_56098159的博客 292

从部署到养成:Hermes智能体接入DeepSeek与微信机器人的完整实战指南

智能体(Agent)正成为大模型从“对话”走向“行动”的关键形态。它通过拆解指令、调用工具、执行任务,让AI真正参与工作流。Hermes作为可本地部署的开源智能体框架,支持接入DeepSeek等主流大模型,并提供网关、工具调用、记忆管理等模块化能力。从Docker容器部署到微信机器人桥接,从自动化定时任务到Computer Use桌面控制,Hermes将个人助理从概念落地为可运行的工程系统。本文基于真实实践,梳理架构原理、部署流程、API配置与高频故障排查,为技术玩家提供一套从零到一的上手指南。

weixin_29045001的博客 263

Qt5.14.2+VS2017开发环境搭建全流程(含插件配置与项目测试)

本文详细介绍了Qt5.14.2与VS2017开发环境的完整搭建流程,包括软件安装、插件配置、环境变量设置以及项目测试。特别针对实际开发中常见的配置问题提供解决方案,帮助C++开发者快速搭建高效的Qt开发环境。

weixin_28419039的博客 217

并发与多线程(三) --- 线程同步

文章目录一、线程同步是什么?二、Volatile三、信号量同步总结 一、线程同步是什么? 资源共享的两个原因是资源紧缺和共建需求。线程共享CPU 是从资源紧缺的维度来考虑的,而多线程共享同一变量,通常是从共建需求的维度来考虑的。 在多个线程对同一变量进行写操作时,如果操作没有原子性,就可能产生脏数据。 所谓原子性是指不可分割的一系列操作指令,在执行完毕前不会被任何其他操作中断,要么全部执行,要么全部不执行。如果每个线程的修改都是原子操作,就不存在线程同步问题。有些看似非常简单的操作其实不具备具备原子性..

weixin_47081743的博客 372

IIS - 会话cookie中缺少HttpOnly属性

不啰嗦,我们直接开始! 先进行常规设置 打开配置编辑器 选中图中节点,将httpOnlyCookies设置为true 然后。。。不起作用。。。 换种方式 通过配置出站规则getcookie添加HttpOnly 在Web.config中添加如下出站规则 <rewrite> <outboundRules> <rule name="Add HttpOnly"> <match serverVa.

。 21万+

Java多线程之多线程之间按顺序调用

Java多线程之多线程之间按顺序调用 多线程之间按顺序调用,实现A->B->C 1. 要求: AA打印5次,BB打印10次,CC打印15次 接着 AA打印5次,BB打印10次,CC打印15次 …来10轮 代码实现: import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Loc...

努力努力再努力L 713

Detector-Free SfM 项目复现完整指南:从环境搭建到代码解析与可视化

本文提供了Detector-Free SfM项目的完整复现指南,涵盖技术背景、环境配置、代码解析和可视化方案。重点包括: 技术背景:Detector-Free SfM通过两阶段策略(粗重建+迭代精化)解决了传统SfM在弱纹理区域的瓶颈问题,采用深度学习匹配器替代传统特征点检测。 环境配置: 详细硬件要求与推荐配置(GPU/CPU/内存) 完整的Ubuntu系统设置步骤 Conda环境创建与依赖安装流程 关键组件安装指南(PyTorch、COLMAP等) 常见错误解决方案 项目特点: 支持多种Detector

huanghm88的专栏 121

Windows远程桌面开发之九-虚拟显示器(Windows 10 Indirect Display 虚拟显示器驱动开发)

by fanxiushu 2019-06-24 转载或引用请注明原始作者。 这里与远程桌面关系不是太大,但这个部分是xdisp_virt远程控制程序的实现多显示器桌面扩展的子功能,因此也归为远程桌面开发一类。 这篇文章与之前发布的...

fanxiushu的专栏 2万+

JUC 多线程顺序执行

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34296641的博客 228

STM32F767 GPIO跑马灯工程从零搭建指南

嵌入式开发中,基于HAL库的STM32工程初始化是确保外设可靠运行的基础环节。其核心在于理解芯片时钟树配置原理、GPIO工作模式与硬件电气特性之间的映射关系。正确启用RCC时钟源、合理分配AHB/APB总线分频系数,可保障系统主频稳定;而精准设置推挽输出、上下拉状态及引脚速度,则直接影响LED等基础外设的驱动可靠性。结合STM32CubeMX图形化配置工具,开发者能将寄存器级操作抽象为可视化流程,显著提升工程可追溯性与复用性。本文以STM32F767IGT6和阿波罗开发板为载体,详解从Repository固

weixin_42453228的博客 61

一文看懂JUC多线程及高并发

本文主要介绍JUC多线程以及高并发 如有需要,可以参考 如有帮助,不忘 点赞 ❥

Cbuc丶的博客 6648

运动想象 (MI) 分类学习系列 (19) : EEG-TransNet

本文提出了一种基于注意力机制的卷积神经网络(EEG-TransNet),用于运动想象脑电图(MI-EEG)解码。该方法创新性地通过平均池化和方差池化提取多模态时间信息,并结合自注意力模块捕获长期依赖关系。消融实验表明,方差池化比最大池化更有效(p<0.05),且注意力模块和卷积编码器对特征判别性至关重要。可视化分析验证了该方法能学习到更具判别性的紧凑特征。该工作为MI-EEG解码提供了新的多尺度时间信息融合视角,代码已开源。

走在深度学习前沿的小宋 358

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java:多线程和JUC详解

Java多线程和JUC详解

游手好闲 3712

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【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万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JUC全面解析-一文带你掌握JUC

本文深入解析了Java并发工具包(JUC)的核心概念和实践应用。从线程池的创建与管理到原子操作类,再到锁机制和并发集合的使用,每个部分都通过详实的讲解帮助读者全面掌握JUC的关键知识点。我们将通过对CAS机制、AQS(抽象队列同步器)、各种同步工具(如CountDownLatch、CyclicBarrier、Semaphore)、ForkJoin框架等的讲解

weixin_67796933的博客 7838

JUC多线程

得此章,JUC可结

weixin_52634451的博客 1068

JUC多线程:线程的基础核心知识汇总

多线程是Java开发中绕不开的核心技能,但很多初学者总被“进程、线程、上下文切换”等概念绕晕。本文用大白话+生活比喻,帮你彻底搞懂线程核心知识,手写代码案例、高频面试题解析一网打尽。多线程是Java开发的“必修课”,但也是“易错课”。理解核心概念后,建议通过实际项目(如高并发计数器、文件分片处理)加深印象。多线程不是炫技,合理使用才能提升性能!

2201_75525624的博客 1904

java--JUC快速入门(彻底搞懂JUC)

java–JUC快速入门(彻底搞懂JUC) 文章目录java--JUC快速入门(彻底搞懂JUC)1、学习多线程之前需要知道的一些概念。2、JUC的结构3、Lock锁(重点)4、集合类不安全5、Callable()6、常用的辅助类7、读写锁8、阻塞队列9、线程池 1、学习多线程之前需要知道的一些概念。 1.1 JUC是什么? JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!...

weixin_43888181的博客 12万+

多线程--JUC并发编程

多线程、并发相关知识点

weixin_45690338的博客 2095

JUC学习笔记及拓展

JUC学习笔记及拓展Java JUC1 Java JUC简介2 volatile 关键字-内存可见性2.1 内存可见性2.2 volatile 关键字3 原子变量与CAS算法3.1 原子变量3.1.1 i++的原子性问题3.1.2 原子变量3.2 CAS算法3.2.1 ABA问题3.2.2 CAS在JAVA中底层的实现3.3 原子性与可见性区别4 ConcurrentHashMap4.1 锁粒度4.2 锁分段4.3 其它4.4 写入并复制5 CountDownLatch(闭锁)5.1 概念5.2 方法介绍6

yZzc_XQ的博客 3924

【Java】多线程与JUC

多线程

Orion 1388

【JavaEE初阶】CAS的ABA问题,JUC多线程编程有用的相关类

本期是多线程的完结篇,涉及到CAS的ABA问题,以及JUC的多线程编程的相关类,例如:callable接口,ReentrantLock可重入锁,信号量semaphore,CountDownLatch类,ConcurrentHashMap,关于他们的性质,以及与我们之前学过的内容join,wait,HashMap....做了比较

GGBond778的博客 2723

【JavaSE】多线程之JUC组件

嘿嘿,一不小心从25年鸽到了26年,,还记得我们在这里留了一点尾巴,也就是JUC(java.util.concurrent包),里面包括一些多线程相关工具,接下来我们就来介绍一下。

stillaliveQEJ的博客 1210
上一篇: JUC学习笔记(3)—Lock锁
下一篇: JUC学习笔记(5)—ReadWriteLockDemo
木木那年
博客等级 码龄12年 37粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值