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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jonn 高级黑马   /  2013-3-5 17:12  /  1077 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. <font size="3">public class TraditionalThreadItem {

  2.         class Business{
  3.                   private boolean flag = true;
  4.                   public synchronized void sub(int i){
  5.                           if(!flag){
  6.                                 try {
  7.                                         this.wait();
  8.                                 } catch (InterruptedException e) {
  9.                                         e.printStackTrace();
  10.                                 }
  11.                           }
  12.                           for(int j=1;j<=10;j++){
  13.                                      System.out.println("sub thread squence of "+j+",loop of "+i);
  14.                               }  
  15.                           flag = false;
  16.                           this.notifyAll();
  17.                   }
  18.                   public synchronized void main(int i){
  19.                           if(flag){
  20.                                 try {
  21.                                         this.wait();
  22.                                 } catch (InterruptedException e) {
  23.                                         e.printStackTrace();
  24.                                 }
  25.                           }
  26.                           for(int j=1;j<=100;j++){
  27.                                      System.out.println("main thread squence of "+j+",loop of "+i);
  28.                              }
  29.                           flag = true;
  30.                           this.notifyAll();
  31.                   }
  32.           }
  33.                 public static void main(String[] args) {
  34.                         final Business  business = new TraditionalThreadItem().new Business();
  35.                         new Thread(new Runnable(){
  36.                                
  37.                                 @Override
  38.                                 public void run(){
  39.                                         for(int i=1;i<=50;i++){
  40.                                                 synchronized(TraditionalThreadItem.class){
  41.                                              business.sub(i);        
  42.                                             }                       
  43.                                         }
  44.                                 }
  45.                         }).start();
  46.                                
  47.                         for(int i=1;i<=50;i++){
  48.                             synchronized(TraditionalThreadItem.class){
  49.                                    business.main(i);
  50.                             }       
  51.                         }
  52.                 }
  53. }</font>
复制代码

3 个回复

倒序浏览
问题是?
回复 使用道具 举报
  1.         //在sub和mian方法上加了两把锁导致了线程死锁,去掉其中一个就可以了。。。代码可以这么改
  2.         public static void main(String[] args) {
  3.                 final Business business = new TraditionalThreadItem().new Business();
  4.                 new Thread(new Runnable() {

  5.                         @Override
  6.                         public void run() {
  7.                                 for (int i = 1; i <= 50; i++) {
  8.                                         // synchronized(TraditionalThreadItem.class){
  9.                                         business.sub(i);
  10.                                         // }
  11.                                 }
  12.                         }
  13.                 }).start();

  14.                 for (int i = 1; i <= 50; i++) {
  15.                         // synchronized(TraditionalThreadItem.class){
  16.                         business.main(i);
  17.                         // }
  18.                 }
  19.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

回复 使用道具 举报
许鑫星 发表于 2013-3-5 17:32

果然是大神...;P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马