Java多线程探究-死锁例子

    xiaoxiao2021-04-16  31

    Java死锁例子

    public class ThreadSyn2 implements Runnable { private static Object obj1 = new Object(); private static Object obj2 = new Object(); /** * @param args */ public static void main(String[] args) { ThreadSyn2 ts1 = new ThreadSyn2(); ThreadSyn2 ts2 = new ThreadSyn2(); Thread t1 = new Thread(ts1);//线程1 Thread t2 = new Thread(ts2);//线程2 t1.setName("theOne"); t2.setName("theTwo"); t1.start(); t2.start(); } public void run() { String name = Thread.currentThread().getName(); if (name.equals("theOne")) { method1(name); } else { method2(name); } } //线程1的方法锁定obj1,线程2就无法完成 private void method1(String name) { System.out.println(name); synchronized (obj1) { System.out.println(name+" 获取了 obj1"+ " 锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name+" 正在申请obj2 "); synchronized (obj2) { System.out.println(obj2); } } } //线程1的方法锁定obj2,线程1就无法完成 private void method2(String name) { System.out.println(name); synchronized (obj2) { System.out.println(name+" 获取了 obj2"+ " 锁"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(name+" 正在申请obj1 "); synchronized (obj1) { System.out.println(obj1); } } } }

    theOne 占有obj1锁,申请obj2锁,但是obj2锁被theTwo占有,theTwo又在申请被theOne占有的obj1锁,导致死锁

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

    最新回复(0)