死锁

本文通过一个具体的Java代码示例,详细介绍了如何在多线程环境下产生死锁现象。通过两个线程对共享资源的不同锁定顺序,展示了死锁发生的条件及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、死锁类

package com.ljb.app.deadlock;
/**
 * 死锁(同步代码块同步对象)
 * @author LJB
 * @version 2015年3月10日
 */
public class Deadlock {
 String s1 = "我是s1";
 String s2 = "我是s2";
 
 int n = 1;
 
 public void write () {
  synchronized (s1) {
   try {
    Thread.sleep(500);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   synchronized (s2) {
    s1 = "我是s1,我被第" + n + "次修改";
    s2 = "我是s2,我被第" + n + "次修改";
   }
  }
  
  n++;
 }
 
 public void read () {
  synchronized (s2) {
   try {
    Thread.sleep(500);
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   synchronized (s1) {
    System.out.println(s1 + "," + s2);
   }
  }
 }
}

2、死锁线程

 package com.ljb.app.deadlock;
/**
 * 死锁线程
 * @author LJB
 * @version 2015年3月10日
 */
public class DeadlockRunnable implements Runnable{
 
 private Deadlock dlock;
 
 public DeadlockRunnable (Deadlock dlock) {
  this.dlock = dlock;
 }
 public void run() {
  for (int i = 0 ; i < 5 ; i++) {
   dlock.read();
   dlock.write();
  }
  
 }
}

3、测试类

package com.ljb.app.deadlock;
/**
 * 测试类
 * @author LJB
 * @version 2015年3月10日
 */
public class TestDeadlock {
 /**
  * @param args
  */
 public static void main(String[] args) {
  Deadlock dlock = new Deadlock();
  
  DeadlockRunnable drunnable = new DeadlockRunnable(dlock);
  
  Thread t1 = new Thread(drunnable);
  Thread t2 = new Thread(drunnable);
  
  t1.start();
  t2.start();
 }
}

运行结果:

我是s1,我是s2

转载于:https://my.oschina.net/u/2320342/blog/384845

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值