两个线程相互等着对方释放同步监听器;等着要对方的结果后才能继续执行就会发生死锁。

男对女说:你先嫁给我,我再给你买房子;女对男说:你先给我买房子,我再嫁给你。

多个线程同时锁住同一个监听对象

在开发中要避免死锁。

死锁的例子:

public class DeadLock {
public static void main(String[] args) {
Resource r1 = new Resource();
Resource r2 = new Resource(); // 每个线程都拥有r1,r2两个对象
Thread myTh1 = new MyThread1(r1, r2);
Thread myTh2 = new MyThread2(r1, r2); myTh1.start();
myTh2.start();
}
} class Resource {
private int i;
} class MyThread1 extends Thread {
private Resource r1, r2; public MyThread1(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
} @Override
public void run() {
while (true) {
// 先获得r1的锁,再获得r2的锁
synchronized (r1) {
System.out.println("1号线程获取了r1的锁");
synchronized (r2) {
System.out.println("1号线程获取了r2的锁");
}
}
}
}
} class MyThread2 extends Thread {
private Resource r1, r2; public MyThread2(Resource r1, Resource r2) {
this.r1 = r1;
this.r2 = r2;
} @Override
public void run() {
while (true) {
// 先获得r2的锁,再获得r1的锁
synchronized (r2) {
System.out.println("2号线程获取了r2的锁");
synchronized (r1) {
System.out.println("2号线程获取了r1的锁");
}
}
}
}
}

jdk线程的死锁的更多相关文章

  1. jdk线程池主要原理

    本文转自:http://blog.csdn.net/linchengzhi/article/details/7567397 正常创建一个线程的时候,我们是这样的:new thread(Runnable ...

  2. Java如何使用线程解决死锁?

    在Java编程中,如何使用线程解决死锁? 以下示例演示如何使用线程的概念解决死锁问题. // from W w w .Y I I b AI.c o M package com.yiibai; impo ...

  3. Java多线程——线程的死锁

    Java多线程——线程的死锁 摘要:本文主要介绍了Java多线程中遇到的死锁问题. 部分内容来自以下博客: https://www.cnblogs.com/wy697495/p/9757982.htm ...

  4. JDK线程池和Spring线程池的使用

    JDK线程池和Spring线程池实例,异步调用,可以直接使用 (1)JDK线程池的使用,此处采用单例的方式提供,见示例: public class ThreadPoolUtil { private s ...

  5. 多线程,线程类三种方式,线程调度,线程同步,死锁,线程间的通信,阻塞队列,wait和sleep区别?

    重难点梳理 知识点梳理 学习目标 1.能够知道什么是进程什么是线程(进程和线程的概述,多进程和多线程的意义) 2.能够掌握线程常见API的使用 3.能够理解什么是线程安全问题 4.能够知道什么是锁 5 ...

  6. JDK 线程池

    JDK 线程池 线程池参数 在JDK的4种线程池之前, 先介绍一下线程池的几个参数 corePoolSize 线程池的核心线程数量, maximumPoolSize 线程池的最大线程数量 keepAl ...

  7. 自己动手写线程池——向JDK线程池进发

    自己动手写线程池--向JDK线程池进发 前言 在前面的文章自己动手写乞丐版线程池中,我们写了一个非常简单的线程池实现,这个只是一个非常简单的实现,在本篇文章当中我们将要实现一个和JDK内部实现的线程池 ...

  8. jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一)

    jdk线程池ThreadPoolExecutor工作原理解析(自己动手实现线程池)(一) 线程池介绍 在日常开发中经常会遇到需要使用其它线程将大量任务异步处理的场景(异步化以及提升系统的吞吐量),而在 ...

  9. 查看jdk 线程 日志

    命令:jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 这些命令 必须 在 linux jdk bin 路径 下执行 eq: ./jstack 10303 即可  如果想把 ...

随机推荐

  1. MyEclipse Hibernate 学习总结

    最近在学习Hibernate,先把学习的过程记录一下,方便自己以后复习. 1.使用工具 MyEclipse 10 2. 1)新建Java程序 2)右键程序,选择MyEclipse-> Add H ...

  2. MS CRM 2011的自定义和开发(11)——插件(plugin)开发(三)

    http://www.cnblogs.com/StoneGarden/archive/2012/02/06/2340661.html MS CRM 2011的自定义和开发(11)——插件(plugin ...

  3. 用Bouncy Castle的C#版API产生公钥和私钥

    开源API链接地址:The Legion of the Bouncy Castle Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其 ...

  4. 替换、恢复Html中的特殊字符

    public static string HtmlEncode(string theString){theString = theString.Replace(">", &q ...

  5. LintCode "The Smallest Difference"

    Binary search. class Solution { int _findClosest(vector<int> &A, int v) { , e = A.size() - ...

  6. Python标准库

    Python标准库是随Python附带安装的,它包含大量极其有用的模块.熟悉Python标准库是十分重要的,因为如果你熟悉这些库中的模块,那么你的大多数问题都可以简单快捷地使用它们来解决. sys模块 ...

  7. NeHe OpenGL教程 第十七课:2D图像文字

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. centos7加固手册

    转自:http://www.centoscn.com/CentosSecurity/CentosSafe/2015/0315/4880.html

  9. Configuration problem: Only one AsyncAnnotationBeanPostProcessor may exist within the context.

    去配置文件中找 , 某个配置文件被引用了两次以上.移除后保留一个即可.如下即可产生上述问题 <import resource="classpath:testContext-curren ...

  10. viewpage广告条的制作

    package com.itheima27.viewpagerdemo; import java.util.ArrayList; import java.util.List; import andro ...