dede 门户网站,厦门市住房和城乡建设局,wordpress个人网站备案管理,贵阳企业免费建站在Java中#xff0c;线程死锁通常发生在两个或更多个线程相互等待对方释放资源的情况下。以下是一个简单的Java示例#xff0c;展示了如何创建线程死锁#xff1a;
public class DeadlockDemo {// 定义两个资源private static Object resource1 new Object();private stat…在Java中线程死锁通常发生在两个或更多个线程相互等待对方释放资源的情况下。以下是一个简单的Java示例展示了如何创建线程死锁
public class DeadlockDemo {// 定义两个资源private static Object resource1 new Object();private static Object resource2 new Object();// 线程1private static class Thread1 extends Thread {public void run() {synchronized (resource1) {System.out.println(Thread 1: Got resource 1);// 模拟一些耗时操作try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}// 尝试获取resource2此时可能导致死锁System.out.println(Thread 1: Waiting for resource 2);synchronized (resource2) {System.out.println(Thread 1: Got resource 2);}}}}// 线程2private static class Thread2 extends Thread {public void run() {synchronized (resource2) {System.out.println(Thread 2: Got resource 2);// 模拟一些耗时操作try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}// 尝试获取resource1此时可能与线程1发生死锁System.out.println(Thread 2: Waiting for resource 1);synchronized (resource1) {System.out.println(Thread 2: Got resource 1);}}}}public static void main(String[] args) {// 启动两个线程new Thread1().start();new Thread2().start();}
}
在这个示例中我们定义了两个资源resource1和resource2以及两个线程Thread1和Thread2。线程1首先获取resource1的锁然后尝试获取resource2的锁。与此同时线程2首先获取resource2的锁然后尝试获取resource1的锁。
由于线程1已经持有了resource1的锁而线程2持有了resource2的锁当线程1尝试获取resource2的锁时它会被阻塞因为线程2已经持有了这个锁。同样地当线程2尝试获取resource1的锁时它也会被阻塞因为线程1已经持有了这个锁。这就导致了两个线程互相等待对方释放资源从而发生了死锁。