多线程死锁问题

1. 死锁概述

死锁是一种并发锁定的特殊状态,指的是,当具有多个共享资源时 一部分线程持有一部分资源的锁 要求另外的线程持有的另外的资源的锁 形成了各自持有各自的锁而要求对方的锁的状态 这样 进入了一个互相等待的状态 都无法继续执行 则称之为产生了死锁
死锁并不是一种真正的锁,而是一种特殊状态,会造成程序无法继续运行或退出,所以要尽力的解决死锁

	

    案例:
    			package cn.tedu.thread;
    			
    			/**
    			 * 死锁
    			 */
    			class DYJ{}
    			class SMY{}
    			
    			public class Demo01 {
    				public static DYJ dyj = new DYJ();
    				public static SMY smy = new SMY();
    				
    				public static void main(String[] args) {
    					new Thread(new T01_A()).start();
    					new Thread(new T01_B()).start();
    				}
    			}
    			class T01_B implements Runnable{
    				@Override
    				public void run() {
    					try{
    						synchronized (Demo01.smy) {
    							System.out.println("B使用扫描仪"+Demo01.smy);
    							Thread.sleep(3000);
    							synchronized (Demo01.dyj) {
    								System.out.println("B使用打印机"+Demo01.dyj);
    								Thread.sleep(2000);
    							}
    						}
    						
    					}catch( Exception e){
    						e.printStackTrace();
    					}
    				}
    			}
    			class T01_A implements Runnable{
    				@Override
    				public void run() {
    					try {
    						synchronized (Demo01.dyj) {
    							System.out.println("A使用打印机"+Demo01.dyj);
    							Thread.sleep(3000);
    							synchronized (Demo01.smy) {
    								System.out.println("A使用扫描仪"+Demo01.smy);
    								Thread.sleep(2000);
    							} 
    						}
    					}catch (InterruptedException e) {
    						e.printStackTrace();
    					}
    				}
    			}
			

2. 死锁产生的条件

a. 多把锁
b. 多个线程
c. 同步嵌套
在Synchronized代码块中再包含Synchronized代码块,这就意味着,占用着一部分锁,再要求另一部分锁

3. 解决死锁

避免死锁
避免同步嵌套来避免死锁的产生
检测并打断死锁
有时无法进行避免死锁的操作,此时只能不停的检测是否有死锁产生,如果有死锁产生,则打断死锁,所谓的打断死锁,就是将造成死锁的某一线程错误退出,打断对锁互相要求的环,从而使程序可以正常运行下去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值