Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

java死锁

作者:依寞相随   发布日期:2025-08-29   浏览:65

public class DeadlockExample {

    private static final Object lock1 = new Object();
    private static final Object lock2 = new Object();

    public static void main(String[] args) {
        Thread thread1 = new Thread(new Task1());
        Thread thread2 = new Thread(new Task2());

        thread1.start();
        thread2.start();
    }

    static class Task1 implements Runnable {
        @Override
        public void run() {
            synchronized (lock1) {
                System.out.println("Thread 1: Holding lock 1...");

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("Thread 1: Waiting for lock 2...");
                synchronized (lock2) {
                    System.out.println("Thread 1: Holding lock 1 & 2...");
                }
            }
        }
    }

    static class Task2 implements Runnable {
        @Override
        public void run() {
            synchronized (lock2) {
                System.out.println("Thread 2: Holding lock 2...");

                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                System.out.println("Thread 2: Waiting for lock 1...");
                synchronized (lock1) {
                    System.out.println("Thread 2: Holding lock 1 & 2...");
                }
            }
        }
    }
}

解释说明

在这个示例中,我们创建了两个线程 thread1thread2,每个线程分别尝试获取两个锁 lock1lock2。线程 thread1 先获取 lock1,然后等待 lock2;而线程 thread2 先获取 lock2,然后等待 lock1

由于这两个线程互相等待对方释放锁,导致了一个死锁的情况。具体来说:

  • thread1 持有 lock1 并等待 lock2
  • thread2 持有 lock2 并等待 lock1

因为两个线程都在等待对方释放锁,所以它们会永远阻塞,形成死锁。

为了避免死锁,可以采取一些措施,例如使用超时机制、按顺序获取锁或者使用更高级的并发工具(如 ReentrantLock)。

上一篇:javastring替换指定字符串

下一篇:java volatile关键字

大家都在看

java连接数据库的代码

java djl

ubuntu 卸载java

java读取excel中的图片

java新建

java sort用法

java collections.sort

java file类的方法

java发送qq邮件

java 判断

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站