java-写一个死锁的案例

本文通过一个简单的Java程序演示了死锁现象。两个线程分别持有不同的对象锁,并尝试获取对方持有的锁,导致双方无限期地等待,形成了死锁状态。

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

死锁:线程A持有一个对象a1的互斥锁,又试图获取另外一个对象b1的互斥锁,而线程B正好持有对象a1的互斥锁,并且试图获取对象b1的互斥锁,2个线程相互等待对方的资源而又互相不作出让步。

<span style="font-size:14px;">package com.test;
/**
 * 死锁测试
 * @author mooner
 *
 */
public class DeadThreadLock {
	public static void main(String[] args) {
		String s1 = "a";
		String s2 = "b";
		
		ThreadLock t1 = new ThreadLock(s1,s2);  //持有"a"的互斥锁,尝试获取"b"的互斥锁
		t1.start();
		
		
		ThreadLock t2 = new ThreadLock(s2,s1);  //持有"b"的互斥锁,尝试获取"a"的互斥锁
		t2.start();
			
	}
}

/**
 * 死锁多线程
 * @author mooner
 *
 */
class ThreadLock extends Thread{
	private String s1;
	private String s2;
	public ThreadLock(){
		
	}
	public ThreadLock(String s1,String s2){
		this.s1 = s1;
		this.s2 = s2;
	}
	public void run(){
		synchronized(s1){  //获取s1对象的互斥锁
			System.out.println(Thread.currentThread().getName()  +"持有对象  "+s1+"  的锁");
			try {
				Thread.sleep(4000);  //睡眠4s钟,好在获取s2对象的互斥锁前,另外一个线程开始运行
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println(Thread.currentThread().getName()  +"尝试获取  "+s2+"  的锁");
			synchronized(s2){  //获取s2对象的互斥锁子
				
			}
		}
	}
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值