死锁模拟

 1 package ;
 2
 3 /**
 4  * 死锁的四大条件 条件互斥 形成环路 循环等待 请求保持条件
 5  *
 6  * 避免死锁的方法:获取2把锁之前睡眠时间差越大,理论上会缓解一点. 死锁不能消除,只能避免或缓解
 7  * (1) 互斥条件:一个资源每次只能被一个进程使用。
 8 (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
 9 (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
10 (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
11 这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之
12 一不满足,就不会发生死锁。
13  *
14  */
15
16 public class DeadLock extends Thread {
17     String s1 = "hello";
18     String s2 = "world";
19     int i = 0;
20
21     public static void main(String[] args) {
22         DeadLock d = new DeadLock();
23         DeadLock d1 = new DeadLock();
24         d.i = 1;
25         d1.i = 2;
26         d.start();
27         d1.start();
28     }
29
30     public void run() {
31         while (i == 1) {
32             synchronized (s1) {
33                 System.out.println(Thread.currentThread() + "first lock");
34                 synchronized (s2) {
35                     System.out.println(Thread.currentThread() + "second lock");
36                 }
37             }
38         }
39
40         while (i == 2) {
41             synchronized (s2) {
42                 System.out.println(Thread.currentThread() + "second lock");
43                 synchronized (s1) {
44                     System.out.println(Thread.currentThread() + "first lock");
45                 }
46             }
47         }
48     }
49
50 }
时间: 2024-08-24 11:20:38

死锁模拟的相关文章

oracle死锁模拟

环境介绍: 用户test01 创建表tab01,用户test02创建表tab02.Test01 更新tab01不提交,test02 更新表tab02不提交.然后test01 更新test02下的表tab02,此时有锁阻塞.锁等待情况发生.接着test02 更新test01下的tab01,那么此时就会有 test01.test02 都在等待对方的资源,但是资源无法释放,满足死锁条件死锁产生! 实施步骤 SQL> create user test01 identified by test01; Us

【故障处理】队列等待之TX - allocate ITL entry引起的死锁处理

[故障处理]队列等待之TX - allocate ITL entry引起的死锁处理 1  BLOG文档结构图       2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① enq: TX - allocate ITL entry等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 ④ ITL死锁解决 ⑤ ITL死锁模拟 ⑥ Merge语句的非关联形式的查询优化   Tips: ①

死锁原因的排查

1,打开跟踪,写入日志DBCC TRACEON (3605,1222,-1) –3605写入errorlog,1222死锁DBCC TRACEON(1222,-1) /若在启动时,加-T 1222同时,可开profile中的Deadlock graph跟踪,以图形化2,分析安装目录下生成的日志   1)确定死锁的资源, 据对象不同查看方式不同.DBCC TRACEON(3604) DBCC PAGE(8,1,96,1)DBCC TRACEOFF(3604) 死锁产生的前提:双方互占有了对方所需求

线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁

线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i): 3 print(i) 4 if __name__ == '__main__': 5 for i in range(10): 6 t = Thread(target=f1,args=(i,)) 7 t.start() 8 print('主线程') 方式二: 1 from threading im

Mysql死锁如何排查:insert on duplicate死锁一次排查分析过程

前言 遇到Mysql死锁问题,我们应该怎么排查分析呢?之前线上出现一个insert on duplicate死锁问题,本文将基于这个死锁问题,分享排查分析过程,希望对大家有帮助. 死锁案发还原 表结构: CREATE TABLE `song_rank` ( `id` int(11) NOT NULL AUTO_INCREMENT, `songId` int(11) NOT NULL, `weight` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`

oracle事务和锁

数据库事务概括 1. 说明 一组SQL,一个逻辑工作单位,执行时整体修改或者整体回退. 2.事务相关概念 1)事务的提交和回滚:COMMIT/ROLLBACK 2)事务的开始和结束 开始事务:连接到数据库,执行DML.DCL.DDL语句 结束事务: 1. 执行DDL(例如CREATE TABLE),DCL(例如GRANT),系统自动执行COMMIT语句 2. 执行COMMIT/ROLLBACK 3. 退出/断开数据库的连接自动执行COMMIT语句 4. 进程意外终止,事务自动rollback 5

理】队列等待之TX - allocate

[故障处理]队列等待之TX - allocate ITL entry引起的死锁处理     一.1  前言部分 一.1.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① enq: TX - allocate ITL entry等待事件的解决 ② 一般等待事件的解决办法 ③ 队列等待的基本知识 ④ ITL死锁解决 ⑤ ITL死锁模拟 ⑥ Merge语句的非关联形式的查询优化   Tips: ① 本文在ITpub(h

黑马程序员----多线程基础

/*** @author Administrator** @description Java多线程编程入门测试类* @history*/// 方法一.继承线程类Threadclass MyThread extends Thread{public MyThread(String threadName){ // 设置当前线程的名称currentThread().setName(threadName);}public void run(){System.out.println(Thread.curre

各种SQL加锁

今天上午和同事火热争论了一番,争来争去围绕的就锁的几个基本概念. record lock.gap lock.next_key lock 当时争完后发现自己对锁的理解更加透彻了:事务的隔离级别就是通过锁来实现的啊. RC:仅有record 锁RR:有record和next_key锁 现在我们就来讨论在RR模式下,各种SQL语句的锁实现: create table t1(id int primary key auto_increment,col1 int not null default 0,col