package com.huowolf; /*死锁的含义: * 多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。 * 由于线程被无限期地阻塞,因此程序不能正常运行。 * * 死锁出现的情形:同步中嵌套同步。 * 但也可能和谐 * * 避免死锁的一个通用的经验法则是: * 当几个线程都要访问共享资源A、B、C时,保证使每个线程都按照同样的顺序去访问它们, * 比如都先访问A,在访问B和C。 */ //死锁示例: class Test implements Runnable{ private boolean flag; public Test(boolean flag) { this.flag = flag; } @Override public void run() { if(flag) { while(true) { synchronized (MyLock.locka) { System.out.println("if locka"); synchronized (MyLock.lockb) { System.out.println("if lockb"); } } } }else { while(true) { synchronized (MyLock.lockb) { System.out.println("else lockb"); synchronized (MyLock.locka) { System.out.println("else locka"); } } } } } } class MyLock { static Object locka = new Object(); static Object lockb = new Object(); } public class DeadLockTest { public static void main(String[] args) { Thread t1 = new Thread(new Test(true)); Thread t2= new Thread(new Test(false)); t1.start(); t2.start(); } }
时间: 2024-09-30 19:18:18