你得每个P1类对象都有一个“不同的“Test对象,这个
p1 start
pause1是P1的Test输出的而下一个
p1 start
pause1是P2的Test输出的

解决方案 »

  1.   

    输出结果是正确的啊!
    这正是wait()的作用啊!wait()方法就是使本线程等待,并允许其他线程使用这个同步方法。
    你把wait()注释掉就明白了。
      

  2.   

    就是说如果不用wait方法,用一个while(true)循环的话,第二个线程就必须阻塞等待第一个线程访问完pause()?
      

  3.   

    当然是,这就是synchronized的意义!
      

  4.   

    就是说当线程调用wait()的时候,自动解开所有它所拥有的对象的锁?
      

  5.   

    试试这个程序
    Test.java
    ==================================
    public class Test {
      public void func1(){
                          pause1();
                          }
      public void func2(){
                          pause1();
                          }  public synchronized void pause1() {
        System.out.println("pause1");
        try {
          while(true) {
    wait();
          }
        }catch(Exception e) {}
        System.out.println("out pause1");
      }
      public static void main(String[] args) {
        Test t = new Test();
        
        t.func1();
        t.func2();
    }
    }
    ============================================================如果输出
    pause1
    pause1
    就说synchronized没有用处如果只是
    pause1那就是说synchronized有用
    :)
      

  6.   

    synchronized
    保证只有取的锁的一个线程来执行内部块,
    wait,是将当前线程放到队列内去。释放掉当前锁。所以,你的结果是交替都有的。
      

  7.   

    特别严重强烈赞同 yuanmeng163(今天我有空)