简单的Java1.4版synchronized多线程的死锁演示
来源:互联网 发布:管家婆sql 安装教程 编辑:程序博客网 时间:2024/05/16 10:55
尽量避开死锁是开发的宗旨,因为死锁不是程序错误,是设计错误,一旦出现线程死锁,很难分析出来
常见的线程死锁就是同步模块的嵌套,面试常用
以下是线程死锁示例:
class Test implements Runnable{ boolean flag = true; Object obj = new Object();//锁 public void run() { if (flag) { while(true) { //使用同步代码块 synchronized(obj) { //同步模块嵌套 synMethod(); } } } else { //用于进城切换演示 while(true) { synMethod(); } } } synchronized void synMethod() { //同步模块嵌套 synchronized(obj) { func(); } } void func() { System.out.println(Thread.currentThread().getName()+"获取资源"); }}class DeadLockDemo{ public static void main(String[] args) { Test l= new Test(); Thread t1 = new Thread(l); Thread t2 = new Thread(l); t1.start(); try{ Thread.sleep(10);}catch (InterruptedException ex){}//为了显示效果而写的主进程休息10ms l.flag = false;//线程切换 t2.start(); }}
封装了线程切换更为简洁:
class Test implements Runnable{ private boolean flag; Test(boolean flag) { this.flag = flag; } public void run() { if (flag) { while(true) { synchronized(LockObject.lockTrue) { synchronized(LockObject.lockFalse) { System.out.println(Thread.currentThread().getName()+" ---->run "); } } } } else { while(true) { synchronized(LockObject.lockFalse) { synchronized(LockObject.lockTrue) { System.out.println(Thread.currentThread().getName()+" ---->run "); } } } } }}class LockObject{ public static final Object lockTrue = new Object(); public static final Object lockFalse = new Object();}class DeadLockDemo{ public static void main(String[] args) { Test l1 = new Test(true); Test l2 = new Test(false); Thread t1 = new Thread(l1); Thread t2 = new Thread(l2); t1.start(); t2.start(); }}
1 0
- 简单的Java1.4版synchronized多线程的死锁演示
- C#多线程的死锁演示
- 多线程中死锁产生的演示
- 简单的Java多线程演示
- synchronized产生的死锁
- 多线程死锁的一个简单例子
- java 多线程 Synchronized的简单介绍
- 多线程多进程的简单演示
- java 多线程(4) 线程同步之锁(synchronized) / 死锁 / 两个锁定对象期间访问(修改)其变量的面试
- java1.5后的多线程框架
- java多线程synchronized的使用及死锁的造成和解锁
- 多线程死锁的解决之道
- 多线程死锁的模拟
- 多线程的死锁
- 多线程的死锁程序
- Java多线程的死锁
- Java学习提要——简述多线程的同步synchronized与死锁
- java多线程理解 以及java实现的简单的死锁
- java 垃圾回收机制
- 最小生成树--prim
- 布局点击变色的设置
- POJ 2104(主席树)
- 前端开发札记(一)
- 简单的Java1.4版synchronized多线程的死锁演示
- Ubuntu下vi编辑器按方向键变成^B^C^D的解决方法
- apache2.4,php5.5,mysql配置问题
- window下eclipse初次运行hadoop遇到的问题(五)
- 【图-最小生成树】NOIP2010 模拟试题 新的开始
- 网络安全,渗透测试相关书籍(备份用)
- Flatten Nested List Iterator
- 如何书写高质量的代码
- 在C#中如何URL编码和解码