Java线程产生死锁的一个例子

avatar 2017年5月22日13:29:15 评论 72 views
广告也精彩

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

代码如下

  1. package com.liuyanzhao;
  2. /*
  3.  *
  4.  * @author Yanzh
  5.  *
  6.  */
  7. class Test implements Runnable {
  8.     static Object lockA = new Object();
  9.     static Object lockB = new Object();
  10.     private boolean flag;
  11.     public Test(boolean flag) {
  12.         this.flag = flag;
  13.     }
  14.     @Override
  15.     public void run() {
  16.         if(flag) {
  17.             synchronized (lockA) {
  18.                 System.out.println(Thread.currentThread().getName()+" if lockA");
  19.                 synchronized (lockB) {
  20.                     System.out.println(Thread.currentThread().getName()+" if lockB");
  21.                 }
  22.             }
  23.         } else {
  24.             synchronized (lockB) {
  25.                 System.out.println(Thread.currentThread().getName()+" else lockB");
  26.                 synchronized (lockA) {
  27.                     System.out.println(Thread.currentThread().getName()+" else lockA");
  28.                 }
  29.             }
  30.         }
  31.     }
  32. }
  33. public class DeadLockDemo {
  34.     public static void main(String[] args) {
  35.         new Thread(new Test(true)).start();;
  36.         new Thread(new Test(false)).start();;
  37.     }
  38. }

运行结果

很显然,一线程拿到了锁A,然后二线程拿到了锁B。现在一线程想要锁B,而二线程想要锁A。他们俩就会陷入无限的等待。

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: