java中死锁的案例
2016-03-29 22:01
399 查看
//小明和小丽两人争夺水壶和水杯喝水。
//最后各执水壶或水杯,都喝不到水,造成死锁。
//最后各执水壶或水杯,都喝不到水,造成死锁。
public class DeadLock { //水壶 private Object object1=new Object(); //水杯 private Object object2=new Object(); public static void main(String[] args) { new DeadLock().test(); } private void test() { // TODO Auto-generated method stub //people 1 Thread th1= new Thread(new Dead(0),"小明"); //people 2 Thread th2=new Thread(new Dead(1),"小丽"); th1.start(); th2.start(); try { Thread.sleep(6000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 死锁类 */ class Dead implements Runnable{ private int tag=0; public Dead(int _tag) { tag=_tag; // TODO Auto-generated constructor stub } @Override public void run() { // TODO Auto-generated method stub if(tag==0){ //尝试着拿水壶 synchronized (object1) { System.out.println(Thread.currentThread().getName()+"拿到了水壶"); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //尝试着去拿水杯 System.out.println(Thread.currentThread().getName()+"尝试着拿水杯"); synchronized (object2) { System.out.println(Thread.currentThread().getName()+"也拿到了水杯"); } } }else{ //尝试着拿水杯 synchronized (object2) { System.out.println(Thread.currentThread().getName()+"拿到了水杯"); try { Thread.sleep(3000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } //尝试着去拿水壶 System.out.println(Thread.currentThread().getName()+"尝试着拿水壶"); synchronized (object1) { System.out.println(Thread.currentThread().getName()+"也拿到了水壶"); } } } } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树