Java菜鸟学习笔记--多线程篇(三):线程死锁
来源:互联网 发布:linux 运行脚本 编辑:程序博客网 时间:2024/05/17 22:02
什么是死锁
一句话解释:
所谓死锁: 是指两个或两个以上的进程/线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
一张图:
死锁实例
1.多线程死锁实例一
/*1.多线程死锁{1.相互嵌套引起的}*/package me.threaddemo4;class Lock implements Runnable{private boolean flag;public Lock(boolean flag){this.flag=flag;}public void run(){if(flag==true){//创建两个钳套的锁/*两个线程启动后,A线程进入这里,使用Lock_A,然后往下执行时候因为A线程需要进入第二层嵌套,但是也不会推出第一层,在第二层钳套中需要Lock_B锁,但是B锁现在线程B还在使用,所以要等待线程B退出这个锁,但是B锁现在也等着进入第二层钳套,B进入第二层钳套需要A锁A等待B释放锁,B等待A释放锁。但是两者如果拿不到另外锁就不能释放自己的锁。因此出现了死循环*/synchronized(Mylock.Lock_A){System.out.println(Thread.currentThread().getName()+" Use Lock_A");synchronized(Mylock.Lock_B){System.out.println(Thread.currentThread().getName()+"Use Lock_B");}}}else{//创建两个钳套的锁,/*输出结果:yg@Gino:~/Desktop/code$ java me.threaddemo4.ThreadDemo_4 线程B Use Lock_B线程A Use Lock_A*///然后卡在这里,就是死锁了synchronized(Mylock.Lock_B){System.out.println(Thread.currentThread().getName()+" Use Lock_B");synchronized(Mylock.Lock_A){System.out.println(Thread.currentThread().getName()+"Use Lock_A");}}}}}class Mylock{public static Object Lock_A=new Object();public static Object Lock_B=new Object();}public class ThreadDemo_4{public static void main(String[] args){Lock lock_true=new Lock(true);Lock lock_false=new Lock(false);//创建两个多线程并且启动new Thread(lock_true,"线程A").start();new Thread(lock_false,"线程B").start();}}
作者:YangGan
出处:http://blog.csdn.net/incyanggan本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名Yanggan(包含链接).
- Java菜鸟学习笔记--多线程篇(三):线程死锁
- Java多线程:线程死锁
- Java多线程:线程死锁
- Java多线程-线程死锁
- Java菜鸟学习笔记--多线程篇(一):多线程简介
- Java 线程同步与死锁 学习笔记
- JAVA学习笔记--多线程(三)synchronized实现线程同步
- Java 多线程学习笔记(三)-守护线程
- Java笔记- 多线程-死锁
- java多线程之 ---- 线程死锁
- java多线程之线程死锁
- 学习笔记——JAVA线程<5>线程的死锁
- Java学习笔记之线程(四):线程的死锁现象
- Java菜鸟学习笔记--语法篇(三):运算符概述
- Java菜鸟学习笔记--数组篇(三):二维数组
- 线程池---多线程学习笔记(三)
- java线程学习(三)----死锁(面试常见)
- 多线程教程之三---线程的死锁
- hdu 4578 Transformation 线段树
- NYOJ 242题 计算球的体积
- 十五个只有程序员会乐的事情
- HDU 4634 - BFS + 状态压缩
- ISO文件
- Java菜鸟学习笔记--多线程篇(三):线程死锁
- c++ 动态判断基类指针指向的子类类型(typeid)
- 第四章函数--函数进阶(递归函数)项目3汉诺塔
- 程序员IT认证有用吗?软件工程师考证有必要吗?
- ubuntu 10.04默认启动windows xp设置方法
- [HTML][CSS]IE兼容性<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
- 趣味问答汇总,不断更新中
- C++第二课
- 删除字符串中的数字和空格