package cn.sasa.demo4;

public class ThreadDemo {
public static void main(String[] args){
DeadLockRunnable dead = new DeadLockRunnable();
Thread t0 = new Thread(dead);
Thread t1 = new Thread(dead);
Thread t2 = new Thread(dead);
t0.start();
t1.start();
t2.start();
/**
* 线程中出现同步的嵌套,容易发生死锁
*
* Thread-1---if---locka---
* Thread-1---if---lockb---
* Thread-1---else---lockb---
* Thread-0---if---locka---
* 发生死锁
*/
}
}
package cn.sasa.demo4;

public class DeadLockRunnable implements Runnable{
/**
* 线程嵌套容易发生死锁,线程出现无限等待
*/
public void run() {
int flag = 100;
while(flag > 0) {
if(flag % 2 == 0) {
//先进入A同步,再进B同步
synchronized(Locka.locka) {
System.out.println(Thread.currentThread().getName() + "---if---locka---");
synchronized (Lockb.lockb) {
System.out.println(Thread.currentThread().getName() + "---if---lockb---");
}
}
}else {
//先进入B同步,再进A同步
synchronized(Lockb.lockb) {
System.out.println(Thread.currentThread().getName() + "---else---lockb---");
synchronized (Locka.locka) {
System.out.println(Thread.currentThread().getName() + "---else---locka---");
}
}
}
flag--;
}
}
}
package cn.sasa.demo4;

public class Locka {
  //单例 对象只允许创建一次
private Locka() {}
public static final Locka locka = new Locka(); }
package cn.sasa.demo4;

public class Lockb {
private Lockb() {}
public static final Lockb lockb = new Lockb();
}

java 线程(六)死锁的更多相关文章

  1. Java线程的死锁和活锁

    目录 1.概览 2.死锁 2.1.什么是死锁 2.2 死锁举例 2.3 避免死锁 3.活锁 3.1 什么是活锁 3.2 活锁举例 3.3 避免活锁 1.概览 当多线程帮助我们提高应用性能的同时,它同时 ...

  2. java 线程的死锁问题

    以下的情况可能出现死锁 1.一个对象的同步方法去调用另一个对象的同步方法,同时另一个对象的同步方法也在调用这个对象的同步方法,导致一定几率的死锁,不一定每次都会出现死锁,模拟的代码如下 package ...

  3. Java线程专栏文章汇总(转)

    原文:http://blog.csdn.net/ghsau/article/details/17609747 JDK5.0之前传统线程        Java线程(一):线程安全与不安全 Java线程 ...

  4. Java线程专栏文章汇总

        转载自 http://blog.csdn.net/ghsau/article/details/17609747 JDK5.0之前传统线程        Java线程(一):线程安全与不安全 J ...

  5. Java线程堆栈分析

    不知觉间工作已有一年了,闲下来的时候总会思考下,作为一名Java程序员,不能一直停留在开发业务使用框架上面.老话说得好,机会是留给有准备的人的,因此,开始计划看一些Java底层一点的东西,尝试开始在学 ...

  6. 不依赖jstack的java 线程dump和死锁检查工具

    java线程dump可以使用jdk的命令"jstack  pid"完成,死锁检查可以用jconsole查看到.这两个工具是java调试的常用方法. 我遇到的问题是:在sles11s ...

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

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

  8. Java线程死锁查看分析方法

    如何查看是否有Java线程死锁?下面介绍两种方法. 一.Jconsole        Jconsole是JDK自带的图形化界面工具,使用JDK给我们的的工具JConsole,可以通过打开cmd然后输 ...

  9. Java线程和多线程(九)——死锁

    Java中的死锁指的就是一种多于两个线程永远阻塞的特殊状况.Java中的死锁状态至少需要多于两个线程以及资源的时候才会产生.这里,我写了一个产生死锁的程序,并且讲下如何分析死锁. 首先来看一下产生死锁 ...

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

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

随机推荐

  1. 关于Unity中NGUI的背包实现之Scrollview(基于Camera)

    基于UIPanel的scrollview实现方式在移动设备上的性能不如基于camera的方式.因为UIPanel的scrollview实现方式要渲染很多的道具图,性能自然就降低了.如果是用第二个摄像机 ...

  2. tensorflow模型量化

    tensorflow模型量化/DATA/share/DeepLearning/code/tensorflow/bazel-bin/tensorflow/tools/graph_transforms/t ...

  3. swoole消息推送

    socket.php // 注释的部分是学习的笔记 <?php //创建websocket服务器对象,监听0.0.0.0:9502端口 $ws = ); //监听WebSocket连接打开事件 ...

  4. DedeCMS织梦文章页图片地址为绝对路径实现方法

    {dede:field.body function='replaceurl(@me)'/} 余斗博客改版后增加了一个m站点即手机站点,用二级域名实现,在做手机站的过程中发现一个问题,手机站和pc站都是 ...

  5. html div+css做页面布局

    http://blog.csdn.net/mercop/article/details/7882000 HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒 ...

  6. js添加事件处理程序

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Linux驱动技术(六) _内核中断

    在硬件上,中断源可以通过中断控制器向CPU提交中断,进而引发中断处理程序的执行,不过这种硬件中断体系每一种CPU都不一样,而Linux作为操作系统,需要同时支持这些中断体系,如此一来,Linux中就提 ...

  8. linux命令之间的分号,&&, ||

    在用linux命令时候, 我们经常需要同时执行多条命令, 那么命令之间该如何分割呢? 分号: 顺序地独立执行各条命令, 彼此之间不关心是否失败, 所有命令都会执行. &&  : 顺序执 ...

  9. Web 通信 之 长连接、长轮询(long polling)(转载)

    基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易 ...

  10. 查看,设置,设备的 竖屏-横屏模式 screen.orientation

    <body> <div id="doc"></div> <div id="model"></div> ...