java线程死锁的简单解释和解决办法

    xiaoxiao2022-06-29  37

    public class Test01 extends Thread { public Object o1; public Object o2; public Test01(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } @Override public void run() { synchronized (o1) { System.out.println("线程A持有o1对象锁"); synchronized (o2) { System.out.println("线程A持有o1和o2两个对象锁"); o2.notify(); } System.out.println("线程A释放o2锁,但是继续持有o1锁"); } System.out.println("线程A释放o1锁,不再持有对象锁"); } } empty public class Test02 extends Thread { public Object o1; public Object o2; public Test02(Object o1,Object o2){ this.o1 = o1; this.o2 = o2; } @Override public void run() {//死锁 synchronized (o2) { System.out.println("线程B持有o2对象锁"); try { o2.wait(); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println("线程B持有o2和o1两把对象锁"); } System.out.println("线程B释放o1锁,但是继续持有o2锁"); } System.out.println("线程B释放o2锁,不再持有对象锁"); } }

    当线程O1和O2线程都有自己的线程锁,并且O1线程锁里还有O2持有线程锁,反之并O2线程锁里还有O1持有线程锁,两个线程同是运行时就发生了死锁现象,O1和O2都

    在等对方释放资源,简单的解决办法就是用用Object类中的wait()和notify(),用法是谁等待,谁打开。

    转载请注明原文地址: https://ju.6miu.com/read-1125212.html

    最新回复(0)