死锁的实例
2015-08-19 11:18
246 查看
死锁的实例
当启动线程t1后,执行t1的fun方法,占用o1资源,然后t1休眠确保能够让t2来执行。t2执行fun()方法,占有o2资源。此时就形成了死锁产生的第四个必要条件。即线程t1占有了t2所需的资源,t2占有了t1所需的资源,双方都不释放,即形成死锁。
http://my.oschina.net/u/1469592/blog/208374
package day11_second; public class DeathLock { public static void main(String[] args) { // TODO Auto-generated method stub DeathLocked1 dl1 = new DeathLocked1(); DeathLocked2 dl2 = new DeathLocked2(); Thread t1 = new Thread(dl1); Thread t2 = new Thread(dl2); t1.start(); t2.start(); } } class Res { public static Object obj1 = new Object(); public static Object obj2 = new Object(); } class DeathLocked1 implements Runnable{ @Override public void run() { // TODO Auto-generated method stub fun(); } private void fun() { // TODO Auto-generated method stub synchronized (Res.obj1) { try {Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (Res.obj2) { System.out.println("在obj1中调用obj2"); } } } } class DeathLocked2 implements Runnable{ @Override public void run() { // TODO Auto-generated method stub fun(); } private void fun() { // TODO Auto-generated method stub synchronized (Res.obj2) { try {Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized (Res.obj1) { System.out.println("在obj2中调用obj1"); } } } }
当启动线程t1后,执行t1的fun方法,占用o1资源,然后t1休眠确保能够让t2来执行。t2执行fun()方法,占有o2资源。此时就形成了死锁产生的第四个必要条件。即线程t1占有了t2所需的资源,t2占有了t1所需的资源,双方都不释放,即形成死锁。
http://my.oschina.net/u/1469592/blog/208374
相关文章推荐
- Oracle Length 和 Lengthb 函数说明 .(用来判断记录值里是否有中文内容)
- 数字签名是什么?
- poj2385 Apple Catching
- salt nginx部署
- POJ-1258 Agri-Net(最小生成树[Prim])
- UVA673括号匹配之vector和stack使用的时候的注意点
- js 跨浏览器基础事件,浏览器检测,判断浏览器的名称、版本号、操作系统
- C/C++之sizeof与strlen的区别
- 如何从一台客户机向服务机发起40亿TCP长连接?
- 曾国藩:从30岁起,脱胎换骨
- Linux环境进程间通信(一)
- ffmpeg视频转换工具使用
- win8应用商店提示无法完成你的购买的两种解决办法
- 如何快速的杀掉Oracle的Session
- php调用webservice的几种方法
- 分享体积小巧,功能强大的网络嗅探和分析工具SnifferView 版本-1.0.0.25
- GPU/DRM 简介
- 没有利润,哪来的服务?
- ASP.NET前台AJAX方法调用后台的方法写法
- 判断一个单向链表是否有环