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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 為了夢想 中级黑马   /  2015-7-25 14:08  /  243 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在多线程中,同一份资源在多个线程中都用了,可能会死锁,因为大家都不释放,举个例子:

  1. public class Lockup {

  2.         public static void main(String[] args) {
  3.                
  4.                 Object m = new Object();
  5.                 Object g = new Object();
  6.                
  7.                 Test t1 = new Test(g,m);
  8.                 Test2 t2 = new Test2(g,m);
  9.                
  10.                 Thread th1 = new Thread(t1);
  11.                 Thread th2 = new Thread(t2);
  12.                
  13.                 th1.start();
  14.                 th2.start();
  15.                
  16.         }
  17.        
  18. }

  19. class Test implements Runnable{

  20.         Object goods ;
  21.         Object money ;
  22.        
  23.        
  24.        
  25.         public Test(Object goods, Object money) {
  26.                 super();
  27.                 this.goods = goods;
  28.                 this.money = money;
  29.         }

  30.         @Override
  31.         public void run() {
  32.                
  33.                 while(true){
  34.                         test();
  35.                 }
  36.                
  37.         }
  38.        
  39.         public void test(){
  40.                 synchronized(goods){
  41.                         try {
  42.                                 Thread.sleep(500);
  43.                         } catch (InterruptedException e) {
  44.                                 e.printStackTrace();
  45.                         }
  46.                         synchronized(money){
  47.                                
  48.                         }
  49.                 }
  50.                 System.out.println("一手给钱");
  51.         }
  52.        
  53. }

  54. class Test2 implements Runnable{

  55.         Object goods ;
  56.         Object money ;
  57.        
  58.        
  59.        
  60.         public Test2(Object goods, Object money) {
  61.                 super();
  62.                 this.goods = goods;
  63.                 this.money = money;
  64.         }

  65.         @Override
  66.         public void run() {
  67.                
  68.                 while(true){
  69.                         test();
  70.                 }
  71.                
  72.         }
  73.        
  74.         public void test(){
  75.                 synchronized(money){
  76.                         try {
  77.                                 Thread.sleep(500);
  78.                         } catch (InterruptedException e) {
  79.                                 e.printStackTrace();
  80.                         }
  81.                         synchronized(goods){
  82.                                
  83.                         }
  84.                 }
  85.                 System.out.println("一手给货");
  86.         }
  87.        
  88. }
复制代码




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马