A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. package com.sergio.Thread;
  2. /**
  3. * @ClassName: DeadLock
  4. * @Description: 有两个对象a、b,有两个线程t1、t2。t1去锁a,同时t2去锁b;而同时t1又想去锁b,t2对象b的锁还没释放,t2又想去锁a,而t1对a的锁还没释放,最终造成死锁
  5. * @author Sergio Han
  6. * @date 2013-8-7 上午12:08:29
  7. *
  8. */

  9. public class DeadLock {

  10.         public static void main(String[] args) {
  11.                 //创建两个对象
  12.                 Object o1 = new Object();
  13.                 Object o2 = new Object();
  14.                
  15.                 //创建两个线程
  16.                 Thread t = new Thread(new T1(o1, o2));
  17.                 Thread t2 = new Thread(new T2(o1, o2));
  18.                
  19.                 //启动
  20.                 t.start();
  21.                 t2.start();
  22.         }
  23. }

  24. class T1 implements Runnable {
  25.         //声明两个对象变量o1、o2
  26.         Object o1;
  27.         Object o2;
  28.         //构造方法
  29.         T1(Object o1, Object o2)
  30.         {
  31.                 this.o1 = o1;
  32.                 this.o2 = o2;
  33.         }
  34.        
  35.         //重写run方法
  36.         public void run() {
  37.                 //锁o1对象的锁
  38.                 synchronized(o1)
  39.                 {
  40.                         try {
  41.                                 //让t1线程休眠1秒
  42.                                 Thread.sleep(1000);
  43.                         } catch (InterruptedException e) {
  44.                                 // TODO Auto-generated catch block
  45.                                 e.printStackTrace();
  46.                         }
  47.                         //锁o2对象的锁
  48.                         synchronized (o2) {
  49.                                 System.out.println("asfsf");
  50.                         }
  51.                 }
  52.         }
  53. }

  54. class T2 implements Runnable {
  55.        
  56.         //声明两个对象变量o1、o2
  57.         Object o1;
  58.         Object o2;
  59.         //构造函数
  60.         T2(Object o1, Object o2)
  61.         {
  62.                 this.o1 = o1;
  63.                 this.o2 = o2;
  64.         }
  65.         public void run() {
  66.                 //锁o2对象的锁
  67.                 synchronized (o2) {
  68.                         try {
  69.                                 //让t2线程休眠1秒,防止没锁上
  70.                                 Thread.sleep(1000);
  71.                         } catch (InterruptedException e) {
  72.                                 // TODO Auto-generated catch block
  73.                                 e.printStackTrace();
  74.                         }
  75.                         //锁o1对象的锁
  76.                         synchronized (o1) {
  77.                                 System.out.println("b");
  78.                         }
  79.                 }
  80.         }
  81. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1

查看全部评分

3 个回复

倒序浏览
有没有更简单的写法?
回复 使用道具 举报
暂时还没想到怎么写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马