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

avatar 2017年05月22日13:29:15 1 2483 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此
死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

代码如下
  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
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0