死锁是多线程编程中的一种常见问题,它发生在两个或多个线程相互等待对方释放锁的情况下。下面是一个简单的Java代码示例,演示了如何创建一个死锁:

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();
    }

    private static class Task1 implements Runnable {
        @Override
        public void run() {
            synchronized (lock1) {
                System.out.println("Task1 acquired lock1");
                try {
                    // Adding some delay to increase the likelihood of deadlock
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (lock2) {
                    System.out.println("Task1 acquired lock2");
                }
            }
        }
    }

    private static class Task2 implements Runnable {
        @Override
        public void run() {
            synchronized (lock2) {
                System.out.println("Task2 acquired lock2");
                try {
                    // Adding some delay to increase the likelihood of deadlock
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                synchronized (lock1) {
                    System.out.println("Task2 acquired lock1");
                }
            }
        }
    }
}

在这个例子中,两个线程(Task1和Task2)分别尝试获取两个不同的锁(lock1和lock2),但是它们获取锁的顺序是相反的。这种情况可能导致死锁,因为一个线程持有lock1并等待lock2,而另一个线程持有lock2并等待lock1。如果你运行这个程序,有可能会观察到死锁的发生。注意,死锁的发生是不确定的,它取决于线程的调度和执行顺序。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.