package test;
/**
* 线程测试二 死锁
* @author 郭胜
*
*/
public class ThreadTestTwo {
public static void main(String[] args){
Object obj1 = new Object();
Object obj2 = new Object();
Test1 t1 = new Test1(true,obj1,obj2);
Test1 t2 = new Test1(false,obj1,obj2);
Thread tt1 = new Thread(t1);
Thread tt2 = new Thread(t2);
tt1.start();
tt2.start();
}
}
class Test1 implements Runnable{
private Object obj1;
private Object obj2;
boolean flag;
public Test1(boolean flag,Object obj1,Object obj2){
this.flag = flag;
this.obj1 = obj1;
this.obj2 = obj2;
}
public void run() {
while(true){
if(flag){
synchronized(obj1){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"…………………………obj1 锁1");
synchronized(obj2){
System.out.println(Thread.currentThread().getName()+"……………………obj2锁2");
}
}
}else{
synchronized(obj2){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"……………………obj2锁2");
synchronized(obj1){
System.out.println(Thread.currentThread().getName()+"…………………………obj1 锁1");
}
}
}
}
}
}
相关推荐
Maven
是一款自动化构建工具,专注于Java项目的构建、依赖的管理。
Java多线程(8)——多线程死锁问题
1 基本概括 2 主要介绍 2.1 死锁的概念 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局。当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 2.2 死锁产生的原因 1) 系统资源的竞争 通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。只有对不可剥夺资源的竞争 才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。 2) 进程推进顺序非法 进程在运行过程中,请求和释放资源
Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (一)
先把这连个都添加到场景中,然后把kinect的depth相机拖到vision sensor中,把kinect的script也拖到vision sensor中,同时要注意修改深度相机的坐标,及修改script,删掉/rgb部分。由于需要导入到仿真场景中PDF文件不能直接导入,所以需要生成图下文件,使用windows自带的画图工具,生成以厘米为单位的图像格式,大小和标定板的设置大小一直。可以生成需要用的标定板的文件,设置标定板的大小,棋盘格的大小,等相关的参数,之后可以保存PDF文件。设置plane的大小。
java中的锁demo_java中的锁
记录一下公平锁,非公平锁,可重入锁(递归锁),读写锁,自旋锁的概念,以及一些和锁有关的java类。公平锁与非公平锁:公平锁就是在多线程环境下,每个线程在获取锁时,先查看这个锁维护的队列,如果队列为空或者自身就是等待队列的第一个,就占有锁。否则就加入到等待队列中,按照FIFO的顺序依次占有锁。非公平锁会一上来就试图占有锁,如果占有失败,再按照公平锁的方式等待。公平锁和非公平锁可以用 Lock lo...
2006NOIP普及组真题 4. 数列
从上述推理中,我们发现要输出的幂次和中的第 N 项(也就是幂次和中的序号N),对应的二进制位数和幂次和对应的二进制位数相同。当 k=3 时,k的幂次为1, 3, 9, 27, 81…,即第0位,第2位均为1,转成 k 进制(k=3)时。,即第2位,第3位均为1,转成 k 进制(k=3)时。转成 k 进制(k=3)时的幂次和为。,即第0位,第1位,第2位均为1,(即第0位,第1位,第2位均为1)N=12时,12的二进制是。(即第0位,第2位均为1)(即第2位,第3位均为1)结论:这道题就变成了。
STM32 HAL库定时器中断里读编码器速度准吗?聊聊MG310电机的测速与防溢出处理
本文探讨了STM32 HAL库在定时器中断中读取编码器速度的精度问题,特别针对MG310电机的测速与防溢出处理提供了解决方案。通过对比定时中断法和编码器模式的性能,揭示了硬件编码器接口在降低误差和CPU占用率方面的优势,并详细介绍了CubeMX配置技巧和防溢出处理的工程实践。
java中的锁demo_Java 中关于锁的一些理解
jdk 6 对锁进行了优化,让他看起来不再那么笨重,synchronized有三种形式:偏向锁,轻量级锁,重量级锁.介绍三种锁之前,引入几个接下来会出现的概念mark work:对象头,对象头中存储了一些对象的信息,这个是锁的根本,任何锁都需要依赖mark word 来维持锁的运作,对象头中存储了当前持有锁的线程,hashCode,GC的一些信息都存储在对象头中.在JVM中,对象在内存中除了本身的...
Lattice FPGA 开发工具Diamond使用流程总结——工具使用
本文介绍了一般的Diamond开发流程,包括工程创建、文件输入、IP使用、约束、管脚分配、和布线布局等流程
揭秘Java死锁:常见成因与解决策略
在 Java 编程中,死锁是一个常见且棘手的问题。死锁是指两个或多个线程互相持有对方所需的资源,导致它们都无法继续执行的状态。本文将深入探讨 Java 死锁的常见成因,并提供有效的解决策略,帮助开发者避免和解决死锁问题。
【自用】吉林大学计算机系统结构第二章:缓存优化 曲冠南老师版 笔记
容量8KB,2的十三次方,块大小16B,一块用掉四位,剩余2的九次方是标志位,则有512行,每个元素8B,则一块两个元素,a数组150块,b数组152块,不出现容量失效。不管是否交换内容,在同一“伪相联”组中的两块都是用同一个索引得到的,因此失效率相同,即:失效率伪相联=失效率2路。伪相联cache的命中时间等于直接映象cache的命中时间加上伪相联查找过程中的命中时间*该命中所需的额外开销。(6) 由编译器控制的预取,硬件预取的替代方法,在编译时加入预取的指令,在数据被用到之前发出预取请求。
基于 Qt C++ 开发一套西门子量子测量系统的控制与数据采集平台
sensorIdCombo->addItems({"QTS-100-001 (温度)", "QPG-200-001 (压力)", "QDS-300-001 (位移)"});precisionTable->setHorizontalHeaderLabels({"传感器ID", "类型", "标称精度", "实际精度", "校准状态"});QWidget *dispWidget = createSensorWidget("量子位移", "mm (±1μm)", 50.0, 0.001);// 传感器状态更新。
8.多线程死锁demo及其解决方案
Java线程死锁demo当线程中的同步代码有多个嵌套同步锁时容易发生死锁,下面的例子中2个线程公用2锁,一个拿着钱,要饭,一个拿着饭,要钱,互相不给,所以可能造成死锁现象:package dielock;public class Money implementsRunnable{ private Object money; private Object food; public ...
手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss
在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。
Java线程锁策略详解与实战解析
实际压测显示,非公平锁的吞吐量通常比公平锁高30%-50%,这也是synchronized默认采用非公平策略的原因。要讲清楚从无锁->偏向锁->轻量级锁->重量级锁的完整链路,以及各自对应的MarkWord变化。当监测到CAS操作失败次数超过阈值(默认10次)时,synchronized会从用户态的轻量级锁升级为需要内核介入的重量级锁,这个过程会伴随明显的性能拐点。开发中常见的版本号控制就是乐观锁的典型实现,而数据库行锁则是悲观锁的实践案例。实际使用时,电商库存系统适合乐观锁,银行转账则需悲观锁保障。
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
Java Thread线程2—线程锁synchronized,Lock,volatile
写法锁对象适用场景粒度同步实例方法this保护实例变量粗同步静态方法Class<?保护静态变量粗同步代码块(this)this与同步实例方法等价中同步代码块(任意对象)任意对象细粒度锁、减少竞争细。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
Java高并发编程:线程锁技术
这里介绍了java5中的线程锁技术:Lock和Condition,实现线程间的通信,其中的读锁和写锁的使用通过一个缓存系统进行了演示,对于Condition的应用通过 一个阻塞队列进行演示
Statistics and Machine Learning Toolbox
Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具
线程锁8问
线程锁8问 class Phone { public synchronized void sendEmail() throws Exception{ TimeUnit.SECONDS.sleep(4); System.out.println("---------sendEmail"); } public synchronized void...
JAVA-线程/线程锁
JAVA-线程 世界上一成不变的东西,只有“任何事物都是在不断变化的”这条真理。 —— 斯里兰卡 Java中创建线程的两种方式 第一种方式,继承Thread类 /* 进程:是一个正在执行中的程序。 每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。线程:就是进程中的一个独立的控制单元。 线程在控制着进程的执行。一个进程中至少有一个线程。Ja
java.lang.IllegalMonitorStateException的异常原因详解
首先我们先来看一段demo代码 public class Demo { public static void main(String[] args) { ThreadImpl thread = new ThreadImpl(new Object()); // 开启一个线程 thread.start(); } } class ThreadImpl extends Thread { // 线程锁对象
Java——线程锁,死锁,等待唤醒机制
一、线程锁 线程安全问题 其实,线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。 由于线程休眠的特性,从哪休眠就从哪继续执行(一个线程的事情还没干完就被其他线程挤下去了),回来继续干就会导致操作的全局变量或静态变量出现问题...
线程锁
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对...
java线程锁资料总结
一、synchronized锁的详解 1.synchronized锁的内存定义 synchronized的底层是使用操作系统的互斥锁来实现的。 内存可见性: 同步块的可见性是由“如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load(载入)或assign(赋值)操作初始化变量的值”、“对一个变量执行unlock操作之前,必须先把此变量同步回主内...
Java中的多线程,线程锁,以及死锁
Java中的多线程 关于多线程我以前的理解就是同时处理多个命令及软件,我的理解是在windows系统中同时运行多个软件被我理解为多线程,实际也是如此,不过理解的不算全面。 多线程的意思是让CPU同时执行程序中的不同的代码,所谓同时执行也不是同时进行,而是同时运行随着随机的顺序,关于多线程的运行先后,可以使用设置优先级来非绝对的控制。 如何创建一个多线程? //首先创建一类,该类
java 等待锁_Java——线程锁,死锁,等待唤醒机制
一、线程锁线程安全问题其实,线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。由于线程休眠的特性,从哪休眠就从哪继续执行(一个线程的事情还没干完就被其他线程挤下去了),回来继续干就会导致操作的全局变量或静态变量出现问题。为了解决这个问...
Java - 【追根溯源】Object类
目录 Object类有何作用? Object类中常见API equals getClass toString clone 测试 <一> Object类有何作用? Object类为JAVA中所有类的父类,在继承体系中处于根(root)的位置; 官方文档:https://docs.oracle.com/en/java/javase/14/docs/api/ja...
Java多线程编程(三)——线程锁
同步代码块解决数据安全问题、同步方法解决数据安全问题、同步方法的格式:、同步方法和同步方法块的区别:、同步静态方法、Lock锁
2163



被折叠的 条评论
为什么被折叠?



