java中线程死锁实例

本文通过一个简单的Java程序示例介绍了线程死锁的概念。两个线程分别尝试获取两个不同的锁,但由于它们需要对方已经持有的锁,导致了死锁状态的发生。

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

java线程死锁问题是一个很头疼的问题,那么今天就举一个小例子:
package com.cai;
public class testDemo2 {
 public static void main(String[] args) throws InterruptedException {
  testThread t1 = new testThread(true);
  testThread t2 = new testThread(false);
  Thread th = new Thread(t1);  
  Thread th2 = new Thread(t2);
  th.start();  
  th2.start();
 }
}
class myLock{
 public static final Object lock1 = new Object();
 public static final Object lock2 = new Object();
}
class testThread implements Runnable{
 private boolean flag; 
 testThread(boolean flag){
  this.flag=flag;
 }
 public void run() {
  if(flag){
   while(true){
   synchronized (myLock.lock1) {
    System.out.println(Thread.currentThread().getName()+"lock1");
    synchronized (myLock.lock2) {
     System.out.println(Thread.currentThread().getName()+"lock2");
    }
   }}
  }else{
   while(true){
   synchronized (myLock.lock2) {
    System.out.println(Thread.currentThread().getName()+"lock2");
    synchronized (myLock.lock1) {
     System.out.println(Thread.currentThread().getName()+"lock1");
    }
   }
  }
  
 }
 }
}
注意:
当我们嵌套使用同步代码时,不同的锁进行嵌套很容易形成死锁。在main方法中创建2个线程th,th2,将我们封装的目标t1,t2分别传入线程中,此时th进入获取lock1的所,而th2进入时获取lock2的锁,t1需要T2的锁,t2需要t1的锁,所以2个互不相让,产生了死锁现象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值