美文网首页程序员
你不知道什么是死锁?

你不知道什么是死锁?

作者: 码上人生 | 来源:发表于2017-03-15 20:20 被阅读0次

当两个线程相互等待对象释放同步监视器时就会发生死锁,一旦出现死锁,整个程序既不会发生任何异常,也不会给任何提示,只是所有线程处于阻塞状态,无法继续,代码如下:

package com.eduask.java.thread.deadlock;

class A

{

public synchronized void foo( B b )

{

System.out.println("当前线程名: " + Thread.currentThread().getName()

+ " 进入了A实例的foo()方法" );    // ①

try

{

Thread.sleep(200);

}

catch (InterruptedException ex)

{

ex.printStackTrace();

}

System.out.println("当前线程名: " + Thread.currentThread().getName()

+ " 企图调用B实例的last()方法");    // ③

b.last();

}

public synchronized void last()

{

System.out.println("进入了A类的last()方法内部");

}

}

class B

{

public synchronized void bar( A a )

{

System.out.println("当前线程名: " + Thread.currentThread().getName()

+ " 进入了B实例的bar()方法" );  // ②

try

{

Thread.sleep(200);

}

catch (InterruptedException ex)

{

ex.printStackTrace();

}

System.out.println("当前线程名: " + Thread.currentThread().getName()

+ " 企图调用A实例的last()方法");  // ④

a.last();

}

public synchronized void last()

{

System.out.println("进入了B类的last()方法内部");

}

}

public class DeadLock implements Runnable

{

A a = new A();

B b = new B();

public void init()

{

Thread.currentThread().setName("主线程");

// 调用a对象的foo方法

a.foo(b);

System.out.println("进入了主线程之后");

}

public void run()

{

Thread.currentThread().setName("副线程");

// 调用b对象的bar方法

b.bar(a);

System.out.println("进入了副线程之后");

}

public static void main(String[] args)

{

DeadLock dl = new DeadLock();

// 以dl为target启动新线程

new Thread(dl).start();

// 调用init()方法

dl.init();

}

}

运行结果如下:

相关文章

  • 你不知道什么是死锁?

    当两个线程相互等待对象释放同步监视器时就会发生死锁,一旦出现死锁,整个程序既不会发生任何异常,也不会给任何提示,只...

  • GCD避免死锁的三要素

    平时总在用GCD,但你知不知道,GCD一不小心就会出现死锁,如果死锁在主线程上,整个程序就完了,所以避免死锁是我们...

  • JavaEE面试题总结 Day39 2018-12-29

    什么是线程死锁?死锁如何产生?如何避免线程死锁? 死锁的介绍: 线程死锁是指由于两个或者多个线程互相持有对方所需要...

  • 什么是死锁?

    参考答案: 死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们...

  • 什么是死锁

    若干子线程在系统资源竞争时,都在等待对方对某部分资源解除占用状态,结果是谁也不愿先解锁,互相干等着,程序无法执行下...

  • 什么是死锁

    当两个或以上的进程在争资源,大家都不肯罢休,但是没有资源又不能正常运行,当出现这种情况的时候,就是死锁。 举个生活...

  • 什么是死锁

    死锁:指多个线程互相占用对方资源的锁,又相互等待对方释放锁,使得这些线程一直处于阻塞状态,无法向下执行。 例如: ...

  • java并发--java死锁

    本篇结构: 前言 什么是死锁 产生死锁的必要条件 死锁的代码示例 死锁排查 如何避免死锁 总结 一、前言 今天被问...

  • Java死锁

    什么是死锁 死锁检测 产生死锁的四个必要条件 如何避免死锁 死锁 死锁,指两个或多个线程之间,由于互相持有对方需要...

  • 什么是死锁,如何避免死锁

    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去...

网友评论

    本文标题:你不知道什么是死锁?

    本文链接:https://www.haomeiwen.com/subject/msjrnttx.html