试试这个程序 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();
这正是wait()的作用啊!wait()方法就是使本线程等待,并允许其他线程使用这个同步方法。
你把wait()注释掉就明白了。
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有用
:)
保证只有取的锁的一个线程来执行内部块,
wait,是将当前线程放到队列内去。释放掉当前锁。所以,你的结果是交替都有的。