• 那是从何处传来的钟声呢?偶尔听到那钟声,平添一份喜悦与向往之情。

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

后端 Nanait 7年前 (2012-08-04) 67次浏览 未收录 0个评论 扫描二维码

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

代码如下

  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. }

运行结果

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

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


何处钟 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Java 线程产生死锁的一个例子
喜欢 (0)
[15211539367@163.com]
分享 (0)

您必须 登录 才能发表评论!