sleep()與wait()區別:
- sleep()是Thread類的方法,wait()是Object類中的方法;
- sleep()方法可以在任何地方使用,wait()方法只能在synchronized方法或者synchronized塊中使用
- Thread.sleep()只會讓出cpu,不會導致鎖的行爲發生改變;
- Object.wait()不僅讓出cpu,還會釋放已經佔有的同步資源鎖。
實例:
package com.gy;
public class Wait {
final static Object obj = new Object();
public static void main(String[] args) throws InterruptedException {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread A is waiting to lock");
synchronized (obj){
System.out.println("Thread A is locked");
try {
//等待2oms,讓出cpu,但是不會釋放鎖
Thread.sleep(20);
System.out.println("Thread A do wait method");
//讓出cpu,並且釋放鎖
obj.wait(20);
System.out.println("Thread A is done");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
Thread.sleep(5);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread B is waiting to lock");
synchronized (obj){
System.out.println("Thread B is locked");
try {
System.out.println("Thread B is sleeping 20 ms");
Thread.sleep(20);
System.out.println("Thread B is done");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
}