public class Test extends Thread {   
  
  private int a = 0;   
  
  private int b = 0;   
  
  public static void main(String[] args) {   
  
    Test test = new Test();   
  
    for (int i = 0; i < 10; i++) {   
  
      Thread thread = new Thread(test, "thread-" + i);   
  
      thread.start();   
  
    }   
  
  }   
  
  public synchronized void doWrite() {   
  
    a++;   
  
    try {   
  
      sleep((int)(Math.random()*100));   
  
    }   
  
    catch (Exception e) {   
  
    }   
  
    b++;   
  
    try {   
  
       sleep((int)(Math.random()*100));   
  
    }    
    catch (Exception e) {     
    }     
  }     
  public synchronized void print() {    
    System.out.println("" + Thread.currentThread().getName() + ":a:" + a);    
    System.out.println("" + Thread.currentThread().getName() + ":b:" + b);     
  }    
  public void run() {   
    for (int i = 0; i < 5; i++) {    
      doWrite();    
      print();    
    }        
  }    
}  
输出结果是什么?

解决方案 »

  1.   

    写个MAIN()方法测试一下不就OK.
      

  2.   

    试下不就知道了么?
    thread-0:a:10
    thread-0:b:10
    thread-1:a:10
    thread-1:b:10
    thread-2:a:10
    thread-2:b:10
    thread-3:a:10
    thread-3:b:10
    thread-4:a:10
    thread-4:b:10
    thread-5:a:10
    thread-5:b:10
    thread-6:a:10
    thread-6:b:10
    thread-7:a:10
    thread-7:b:10
    thread-8:a:10
    thread-8:b:10
    thread-9:a:10
    thread-9:b:10
    thread-0:a:20
    thread-0:b:20
    thread-1:a:20
    thread-1:b:20
    thread-2:a:20
    thread-2:b:20
    thread-3:a:20
    thread-3:b:20
    thread-4:a:20
    thread-4:b:20
    thread-5:a:20
    thread-5:b:20
    thread-6:a:20
    thread-6:b:20
    thread-7:a:20
    thread-7:b:20
    thread-8:a:20
    thread-8:b:20
    thread-9:a:25
    thread-9:b:25
    thread-0:a:29
    thread-0:b:29
    thread-1:a:29
    thread-1:b:29
    thread-2:a:29
    thread-2:b:29
    thread-3:a:29
    thread-3:b:29
    thread-4:a:30
    thread-4:b:30
    thread-6:a:30
    thread-6:b:30
    thread-7:a:30
    thread-7:b:30
    thread-8:a:30
    thread-8:b:30
    thread-5:a:30
    thread-5:b:30
    thread-9:a:39
    thread-9:b:39
    thread-1:a:39
    thread-1:b:39
    thread-2:a:39
    thread-2:b:39
    thread-3:a:39
    thread-3:b:39
    thread-0:a:39
    thread-0:b:39
    thread-4:a:39
    thread-4:b:39
    thread-6:a:39
    thread-6:b:39
    thread-7:a:39
    thread-7:b:39
    thread-8:a:39
    thread-8:b:39
    thread-5:a:48
    thread-5:b:48
    thread-9:a:48
    thread-9:b:48
    thread-1:a:48
    thread-1:b:48
    thread-2:a:48
    thread-2:b:48
    thread-3:a:48
    thread-3:b:48
    thread-0:a:48
    thread-0:b:48
    thread-4:a:48
    thread-4:b:48
    thread-6:a:48
    thread-6:b:48
    thread-7:a:48
    thread-7:b:48
    thread-8:a:50
    thread-8:b:50
    thread-5:a:50
    thread-5:b:50
    thread-9:a:50
    thread-9:b:50
      

  3.   

    LZ是刚学多线程吧,我哪知道执行哪个线程呀,要是LZ知道标准答案的话,那可以直接去Intel啦
      

  4.   

    本来我期望的是
    thread-0:a:1  
    thread-0:b:1  
    thread-0:a:2  
    thread-0:b:2  
    thread-0:a:3  
    thread-0:b:3  
    thread-0:a:4  
    thread-0:b:4  
    thread-0:a:5  
    thread-0:b:5  
    thread-1:a:6  
    thread-1:b:6  
    thread-1:a:7  
    thread-1:b:7  
    thread-1:a:8  
    thread-1:b:8  
    thread-1:a:9  
    thread-1:b:9  
    thread-1:a:10  
    thread-1:b:10  
    thread-2:a:11  
    thread-2:b:11  
    thread-2:a:12  
    thread-2:b:12  
    thread-2:a:13  
    thread-2:b:13  
    thread-2:a:14  
    thread-2:b:14  
    thread-2:a:15  
    thread-2:b:15  
    thread-3:a:16  
    thread-3:b:16  
    thread-3:a:17  
    thread-3:b:17  
    thread-3:a:18  
    thread-3:b:18  
    thread-3:a:19  
    thread-3:b:19  
    thread-3:a:20  
    thread-3:b:20  
    thread-4:a:21  
    thread-4:b:21  
    thread-4:a:22  
    thread-4:b:22  
    thread-4:a:23  
    thread-4:b:23  
    thread-4:a:24  
    thread-4:b:24  
    thread-4:a:25  
    thread-4:b:25  
    thread-5:a:26  
    thread-5:b:26  
    thread-5:a:27  
    thread-5:b:27  
    thread-5:a:28  
    thread-5:b:28  
    thread-5:a:29  
    thread-5:b:29  
    thread-5:a:30  
    thread-5:b:30  
    thread-6:a:31  
    thread-6:b:31  
    thread-6:a:32  
    thread-6:b:32  
    thread-6:a:33  
    thread-6:b:33  
    thread-6:a:34  
    thread-6:b:34  
    thread-6:a:35  
    thread-6:b:35  
    thread-7:a:36  
    thread-7:b:36  
    thread-7:a:37  
    thread-7:b:37  
    thread-7:a:38  
    thread-7:b:38  
    thread-7:a:39  
    thread-7:b:39  
    thread-7:a:40  
    thread-7:b:40  
    thread-8:a:41  
    thread-8:b:41  
    thread-8:a:42  
    thread-8:b:42  
    thread-8:a:43  
    thread-8:b:43  
    thread-8:a:44  
    thread-8:b:44  
    thread-8:a:45  
    thread-8:b:45  
    thread-9:a:46  
    thread-9:b:46  
    thread-9:a:47  
    thread-9:b:47  
    thread-9:a:48  
    thread-9:b:48  
    thread-9:a:49  
    thread-9:b:49  
    thread-9:a:50  
    thread-9:b:50  可结果。。
      

  5.   

    答:将你的run()中的代码改成:
    public void run() {   
      synchronized(this){
        for (int i = 0; i < 5; i++) {    
          doWrite();    
          print();    
        } 
      }
      }    
      

  6.   

    一共是10个线程,而且每个线程是执行五次,由于dowrite方法和print方法的同步性和执行的先后顺序,得出的结果是3楼内容,当然如果要出现楼主的效果,定UP!将计算和打印一起同步,屏蔽二者的执行的先后顺序,作为一个整体来执行