java实现死锁

    xiaoxiao2021-03-25  101

    1.死锁: 死锁的定义是,两个或两个以上的 线程或进程 在执行过程中,由于 竞争资源或者由于彼此通信 而造成的一种阻塞的现象。 我们简化一下,就当成只有两个线程。现在有线程1 和线程 2 。线程 1 执行过程中,先 锁定 了对象 a ,然后需要再锁定 b 才能继续执行代码;而线程 2 正巧相反,先锁定了 b ,需要再锁定 a 才能继续执行代码。这时,两个线程都等着对方解锁,才能继续执行,这时,两个线程就进入等待状态,最终不会有线程执行。这就变成了死锁。 尽量避免加多个锁,就可以尽量避免死锁。 package com.mytest.test001; public class DeadLockTest { public static void main(String[] args) { Thread t9 = new Thread(new DeadLock(true)); Thread t10 = new Thread(new DeadLock(false)); t9.start(); t10.start(); } } class DeadLock implements Runnable { boolean lockFormer; static Object o1 = new Object(); static Object o2 = new Object(); DeadLock(boolean lockFormer) { this.lockFormer = lockFormer; } @Override public void run() { if (this.lockFormer) { synchronized (o1) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o2) { System.out.println("o2 1ock"); } } } else { synchronized (o2) { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (o1) { System.out.println("o1 1ock"); } } } } }  
    转载请注明原文地址: https://ju.6miu.com/read-15349.html

    最新回复(0)