JavaSE中多线程案例1(关于对象锁)

【软件逆向学习记录】x64dbg调试器入门2:主调试窗口功能及字符串搜索功能介绍 在x64dbg中, ​​CPU视图 是调试过程中最核心的界面,通常被称为​​主调试窗口​​或​​调试视图​​,总体分为四个区域,代码区(反汇编),数据区(内存窗口),寄存器区和堆栈区,详细位置如下图:示例数据代码区最左侧为内存地址,第二块区域为程序代码值,原始程序代码经编译和汇编后变为二进制机器码存储在计算机中,调试器将其展示为易于阅读的十六进制,第三块区域是机器码反汇编后的汇编代码,最右侧为代码的注释窗口,有一些原始的注释,也可以自己添加注释PS:汇编和反汇编解释。 阅读详情

案例要求:

某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,
并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下:
编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]
编号为: 1 的员工 从后门 入场! 拿到的双色球彩票号码是: [06, 11, 14, 22, 29, 32, 15]
//.....
从后门入场的员工总共: 13 位员工

从前门入场的员工总共: 87 位员工

/*
 * 定义员工Employee共享数据为进入年会的员工个数
 */
public class Employee {
	public int num = 1;
}
/*
 * 前门线程
 * 为了保证不同线程任务在操作共享数据时没有安全隐患,需要:
 * 在ComMeeting测试类中创建唯一一个Employee对象,并将这个对象作为参数传入本前门线程类的构造器
 * 将这个对象作为同步构造器中的锁对象
 */
public class FDoor implements Runnable{
	private Employee e;
	public int count = 0;
	private boolean b = false;
	public FDoor(Employee e) {
		super();
		this.e = e;
	}
	private Random ran = new Random();
	public void run() {
		while(true) {
				synchronized(e) {
					if(e.num <= 100) {
						ArrayList<Integer> arr = new ArrayList<Integer>();
						while(arr.size() < 7) {
							int ballNum = ran.nextInt(33) + 1;
							if(!arr.contains(ballNum)) {
								arr.add(ballNum);
							}
						}
						System.out.print("编号为: " + e.num + "的员工从前门入场!拿到的双色球彩票号码是:");
						System.out.print("[");
						for(int i = 0; i < 7; i++) {
							if(i <= 5) {
								if(arr.get(i) < 10) {
									System.out.print("" + 0 + arr.get(i) + ",");
								}else {
									System.out.print(arr.get(i) + ",");
								}
							}else{
								if(arr.get(i) < 10) {
									System.out.println("" + 0 + arr.get(i) + "]");
								}else {
									System.out.println(arr.get(i) + "]");
								}
							}
						}
						count++;
						e.num++;
					}
				}
		}
	}
}
/*
 * 后门线程
 * 为了保证不同线程任务在操作共享数据时没有安全隐患,需要:
 * 在ComMeeting测试类中创建唯一一个Employee对象,并将这个对象作为参数传入本后门线程类的构造器
 * 将这个对象作为同步构造器中的锁对象
 */
public class BDoor implements Runnable{
	private Employee e;
	public int count = 0;
	public BDoor(Employee e) {
		super();
		this.e = e;
	}
	private Random ran = new Random();
	public void run() {
		while(true) {
				synchronized(e) {
					if(e.num <= 100) {
						ArrayList<Integer> arr = new ArrayList<Integer>();
						while(arr.size() < 7) {
							int ballNum = ran.nextInt(33) + 1;
							if(!arr.contains(ballNum)) {
								arr.add(ballNum);
							}
						}
						System.out.print("编号为: " + e.num + "的员工从后门入场!拿到的双色球彩票号码是:");
						System.out.print("[");
						for(int i = 0; i < 7; i++) {
							if(i <= 5) {
								if(arr.get(i) < 10) {
									System.out.print("" + 0 + arr.get(i) + ",");
								}else {
									System.out.print(arr.get(i) + ",");
								}
							}else {
								if(arr.get(i) < 10) {
									System.out.println("" + 0 + arr.get(i) + "]");
								}else {
									System.out.println(arr.get(i) + "]");
								}
							}
						}
						count++;
						e.num++;
					}
				}
		}
	}
}
/*
 * 年会线程,创建Runnable实现类对象,并创建两个线程,开启线程
 */
public class ComMeeting {
	public static void main(String[] args) {
		Employee e = new Employee();
		
		FDoor fd = new FDoor(e);
		BDoor bd = new BDoor(e);
		
		Thread tFD = new Thread(fd);
		Thread tBD = new Thread(bd);
		
		tFD.start();
		tBD.start();
		
		//让主线程“main”休眠1s,保证员工已经全部从前后门进入,再分别输出前后门进入的人数
		try {
			Thread.currentThread().sleep(1000);
		}catch(Exception ex) {
			
		}finally {
			System.out.println("从前门进入的员工总共: " + fd.count);
			System.out.println("从后门进入的员工总共: " + bd.count);
		}
	}
}



【26美赛E题 Passive Solar Shading】2026美赛数学建模(MCM/ICM)思路解析及代码分享 本文研究了被动太阳能遮阳(PSS)策略在建筑节能中的应用,针对Sungrove大学(低纬高温)和Borealis大学(高纬寒冷)两种典型气候条件,建立了动态太阳辐射-热平衡模型。通过优化遮阳结构(外檐长度、百叶角度)、窗户布局和内部热质量分布,实现了夏季制冷负荷降低30-40%(Sungrove)和冬季采暖负荷减少15-25%(Borealis)。创新性地采用全天候动态遮阳建模方法,结合热质量优化与储能设计,提出了可适应不同气候条件的建筑节能解决方案,为未来可持续建筑设计提供了量化框架。 阅读详情

相关推荐

动态表单设计

自定一表单数据结构。内容展示如有必要行转列。前端根据题目类型自定义组件后端跟俊题目类型用策略模式校验各种类型这样有统计功能的简单动态问卷就可以了展示时可能某些场景需要行转列。大概估摸使用的话有可能kmic_form_data_detail表的记录数比较大,后期再考虑数据或者表迁移或拆分。

zquwei的博客 3465

快速了解Java中的15把锁!

锁是一种抽象的概念,用于控制对共享资源的访问。它确保在同一时间只有一个线程可以访问被锁保护的代码块或对象。Java 中的锁可以是显式的(如通过ReentrantLock类实现)或隐式的(如使用synchronized关键字)。

qq_62097431的博客 989

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 674

java锁优化

1. 同步的原理JVM规范规定JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步是使用monitorenter和monitorexit指令实现,而方法同步是使用另外一种方式实现的,细节在JVM规范里并没有详细说明,但是方法的同步同样可以使用这两个指令来实现。monitorenter指令是在编译后插入到同步代码块的开始位置,而m...

weixin_33923762的博客 223

cpp中auto, auto &和const auto &的区别

笔者初学cpp,如有纰漏,请见谅并指正。 用在哪 auto用于推断类型,具体可用于声明变量时根据初始化表达式自动推断该变量的类型,也就是可用在for循环。 也可以用于声明函数返回值的占位符。 怎么用 这里主要讲for循环中三者的区别 直接说结论 auto auto用于copy一份集合中的数据,对于这种情况,在循环体中不论怎么修改copy的数据,是不会影响到原有集合中的数据的。 举个简单的例子 int arr[5] = {0, 1, 2, 3, 4}; cout << "使用auto" <&

NinoSun的博客 3176

(R,线性回归)R语言里的模型诊断图(Residuals vs Fitted,Normal QQ , Scale-Location ,Residuals Leverage)

线性回归,是概率统计学里最重要的统计方法,也是机器学习中一类非常重要的算法。线性模型简单理解非常容易,但是内涵是非常深奥的。尤其是线性回归模型中的Diagnostics plot的阅读与理解一直被认为是线性回归中的一个难点。 在任何线性模型中,能够直接“lm”(模型有意义),既要考虑各个参数的t-test所得出的p-value,也要考虑总体模型F-检验得出的p-value。在这之后,还要清楚一个...

qq_35837578的博客 7万+

Java中的锁

Java中的锁 Lock锁 Lock锁介绍 JavaSE 5之后,并发包中新增了Lock**接口(以及相关实现类)锁功能,它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁,虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取释放锁的编写性,但是却拥有了锁获取与释放的可操作性、可中断性以及超时获取锁**等多种synchroni...

Jet_Green的博客 446

2023华为OD机试真题B卷 Python 实现【最长的元音子串长度】

定义当一个字符串只有元音字母(a,e,i,o,u,A,E,I,O,U)组成,称为元音字符串,现给定一个字符串,请找出其中最长的元音字符串,并返回其长度,如果找不到请返回0, 字符串中任意一个连续字符组成的子序列称为该字符串的子串

MISAYAONE的博客 902

Java中关于多线程的锁对象(同步代码块)使用的问题

例题: 某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程,并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码。线程运行后打印格式如下: 编号为: 2 的员工 从后门 入场! 拿到的双色球彩票号码是: [17, 24, 29, 30, 31, 32, 07]编号为: 1 的员工 从后门 入场! 拿到的双色球彩...

weixin_43020359的博客 2065

21、空间数据处理中的克里金方法及应用

本文介绍了空间数据处理中的克里金方法,特别是带外部漂移的克里金法(KED)及其在遥感数据融合和支持变化问题中的应用。讨论了克里金方法的基本原理、优缺点以及在不同空间分辨率遥感图像融合中的具体操作流程。同时,还涉及了地统计数据融合和支持变化问题的解决方案,包括块克里金法、面到点克里金法和多边形克里金法等。

gold的博客 90

串口通信的性能瓶颈分析:如何提高数据吞吐量和降低延迟

摘要: 串口通信在高频或大数据场景下存在吞吐量不足、延迟高、丢帧等问题,主要瓶颈包括波特率限制、缓冲区不足、CPU轮询延迟等。优化策略包括:提升波特率至硬件上限、增大缓冲区、采用异步I/O(如ReadAsync)减少线程切换,使用二进制协议降低解析开销。实时性方面需启用硬件流控、批量发送数据,并优化线程优先级。跨平台适配需区分Windows/Linux的缓冲区设置与异步机制。性能测试可通过吞吐量、延迟及回环测试验证优化效果,核心原则是硬件匹配、异步处理、协议优化与跨平台适配。(150字)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 985

线程练习,感觉自己眼瞎了

package cn.mrli.demo1;public class Demo2 {public static void main(String[] args) {// SSQ ssq = new SSQ();// new Thread(ssq, "前门").start();// new Thread(ssq, "后门").start();Number num = new Number();new

lj531113163的博客 303

cadence中利用sva进行FPV实战(可直接使用)

在cadence中使用fpv进行formal验证

youzjuer的博客 749

Java多线程学习(二)synchronized关键字(1)

转载请备注地址: https://blog.youkuaiyun.com/qq_3433... Java多线程学习(二)将分为两篇文章介绍synchronized同步方法另一篇介绍synchronized同步语句块。系列文章传送门: Java多线程学习(一)Java多线程入门 Java多线程学习(二)synchronized关键字(1) java多线...

weixin_34102807的博客 105

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JavaSE多线程与线程同步以及对象锁

在使用java多线程的时候如果着多个线程访问的是同一个共享数据; 例如售票, 多个售票点线程各自售票, 但都是从一个地方取票, 这就会造成操作系统让多个线程能够"同时"访问这个共享数据, 所谓同时并不是真正意义上的同时,而是很短间隔; 只是这个线程不能一次性执行完它的线程体, 比如说它现在只拿到了共享变量的值, 但是还没有做修改, 但是这时很可能会由于cpu分配给自己的时间片用完了而进入阻塞状态,...

qq_41422774的博客 350

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【JavaSE】线程的同步和死锁,synchronized对象锁和全局锁,一个生活的例子解释。

一、synchronized加锁操作 1.多线程为什么要加锁? 因为在多线程启动之后,所有线程都是无顺序任意运行的,甚至几乎同时访问同一个资源或者代码块,所以上一个线程对资源所做的改变,还没来得及使用,就有可能被下一个线程所覆盖。 引入锁的概念,就是为了让竞争资源在各个线程使用的时候可以互不影响。 2.synchronized两种使用方法 对象锁 ...

qq_39487033的博客 420

怀旧版电脑GBC模拟器

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

JavaSE基础知识-多线程-synchronized对象锁

在多线程编程中,当多个线程同时操作共享资源并进行修改操作时,很容易出现数据不一致的问题(比如银行账户同时取款导致余额异常)。线程同步机制就是为了解决这类问题,而synchronized是 Java 中最常用的同步方式之一。本文将通过一个 “多线程取款” 的实例,详细解析线程同步的必要性、synchronized的工作原理及具体用法。

2503_91308956的博客 905

JavaSE基础:多线程基础理解例子

JavaSE基础:多线程基础理解例子 文章目录JavaSE基础:多线程基础理解例子前言1、创建线程(继承Thread类)2、创建线程(实现Runnable接口)3、线程的常用方法4、终止线程的睡眠(interrupted方法)5、安全地关闭线程6、合并线程(join方法)7、线程的同步7.1 类锁,对象锁7.2 synchcronized的用法(简单模仿银行存取款功能)7.3 死锁 前言 以下为线程基础知识点的具体练习理解例子 1、创建线程(继承Thread类) /* 使用继承Thread类的方法

weixin_44675404的博客 152

JavaSE基础知识-多线程-synchronized类锁

在多线程编程中,当多个线程操作静态资源(静态变量、静态方法)时,普通的 “对象锁”(保护实例资源)往往无能为力。这时需要 “类锁” 登场 —— 它是针对类级别资源的同步机制,能保证静态资源的线程安全。

2503_91308956的博客 781

Day23JavaSE——多线程&实现

Day23JavaSE——多线程&实现 文章目录Day23JavaSE——多线程&实现进程的概述和多进程的意义并行和并发的区别Java程序运行原理和JVM的启动是多线程的吗多线程实现方式一案例利用多线程复制文件线程优先级问题线程控制实现多线程方式二(解决了Java中只能单继承问题)实现多线程方式3卖电影票案例继承Thread类的方式卖电影票案例实现Runnable接口的方式卖电影票线程安全问题生产消费者线程案例同步代码块解决线程安全问题同步方法锁JVM内存模型JVM内存模型 多线程 进程

adAir_liu的博客 1486

JavaSE-多线程(1)- 线程概念

JavaSE-多线程(1)- 线程概念 进程: 进程是程序的一次执行过程,在java中启动main函数就是启动了一个JVM进程 例如,当执行下面两个类时,即启动了两个进程: public class ProcessTest { public static void main(String[] args) { while(true){ try { Thread.sleep(2000); Syste

sql2008help的博客 269

javaSE(基础 集合 多线程)

java基础知识面试题,包含了java基础,java集合,以及java多线程的面试题的汇总.

pqy的博客 2305

JavaSE 多线程 死锁示例

package ticket; class Test extends Thread{ private boolean flag; Test(boolean flag){ this.flag=flag; } public void run(){ if (flag) { synchronized(MyLock.locka){ System.out.println(Thre

qq_19434213的博客 263

JavaSE-多线程(11)- LockSupport

JavaSE-多线程(11)- LockSupport 使用LockSupport 类可使线程暂停,请看下例: 例1 线程 t1 执行 LockSupportTest 类run方法,在run方法中,每隔1秒输出一次 i 的值,一共输出10次,在i等于5时暂停线程,主线程睡眠8秒后,调用 activate 方法(实际调用 LockSupportTest 对象即锁的notify方法),t1线程继续执行 package com.hs.example.base.multithread.day01; public

sql2008help的博客 763

javaSE 死锁,多线程同步嵌套

运行Java: java -Xms100M -Xmx200M HelloWorld;  运行java程序时,手动分配内存的最大值和最小值,可以优化垃圾回收。 故障诊断:死锁(安装ThreadDump,可以定位产生死锁的位置信息)   Demo.java: package cn.xxx.demo; public class Demo { public static void main(S...

houyanhua1的专栏 359

javaSE学习笔记——第25天多线程二、GUI(图形用户接口)概述

javaSE学习第二十五天 java知识 多线程(单例设计模式) 单例设计模式:保证类在内存中只有一个对象。 如何保证类在内存中只有一个对象呢? (1)控制类的创建,不让其他类来创建本类的对象。private (2)在本类中定义一个本类的对象。Singleton s; (3)提供公共的访问方式。 public static Singleton getInstance(){return...

影龙武的博客qq_43594119 353
上一篇: Java中多线程死锁问题及注意事项
下一篇: JavaSE中多线程案例2(关于多线程通信-等待与唤醒)
钟不冷
博客等级 码龄10年 17粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值