线程死锁例子
2017-01-18 18:04
405 查看
package org.tuyifei.dao; /*** * 当线程a进出持有a的同步代码块后休眠,现在bool为false ,所以进入else,线程b持有b锁,相互等待,造成死锁 */ public class Family implements Runnable { private byte[] a = new byte[0]; private byte[] b = new byte[0]; private boolean bool = true; public static void main(String[] args) { Family family = new Family(); Thread r1 = new Thread(family); Thread r2 = new Thread(family); r1.setName("售票员1"); r2.setName("售票员2"); r1.start(); r2.start(); } @Override public void run() { if (bool) { bool = false; synchronized (a) { System.out.println(Thread.currentThread().getName() + "a"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (b) { System.out.println(Thread.currentThread().getName() + "b"); } } } else { bool = true; synchronized (b) { System.out.println(Thread.currentThread().getName() + "b"); synchronized (a) { System.out.println(Thread.currentThread().getName() + "a"); } } } } }
相关文章推荐
- OVER(PARTITION BY)函数介绍
- 并发和并行
- 行者企业家天授唱诗人或是后互联网小鲜肉-2017年1月江西IDC排行榜与发展报告
- Restful架构
- android-activity生命周期学习
- 使用 Angular 2 开发单页应用程序之一
- JavaEE JDBC RowSet行集
- 计算器修正代码
- 教你怎样维修内存条
- 飞塔100D添加地址保留的两种方法
- Android开发工具类--NetUtils
- 进程控制(上):进程创建,进程等待,进程终止
- 反向传导算法 推导
- sql取出商品表每个类别的前3条记录
- JESD79-4 第4章 SDRAM命令描述与操作(4.5-4.7)
- 二叉搜索树的实现(insert、find、remove)
- Centos6.8 搭建nexus
- drawText函数详解(转)
- 切换CSS3实现隐藏与显示效果
- 《Java并发编程的艺术》留给自己以后看的笔记