wait()
java对象中的方法,必须是锁定的对象(不然会抛出java.lang.IllegalMonitorStateException),线程放弃对象锁,只有调用notify()方法恢复到可运行状态。
b.getClass().wait(10000);//B
b.wait(10000);//B的实例
sleep()
Thread中的方法,暂停此线程执行时间,期间不会释放当前锁定的对象锁。
示例代码:
package thread;
public class TestThread4 {
private volatile Integer b = new Integer(0);
public static void main(String[] args) {
TestThread4 testThread = new TestThread4();
MyThread0 myThread0 = testThread.new MyThread0();
myThread0.start();
MyThread1 myThread1 = testThread.new MyThread1();
myThread1.start();
}
class MyThread0 extends Thread {
@Override
public void run() {
synchronized (b) {
try {
System.out.println("0:进入等待");
b.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("0;执行完毕");
}
}
class MyThread1 extends Thread {
@Override
public void run() {
synchronized (b) {
System.out.println("1:等待取消");
b.notify();
try {
System.out.println("1:进入睡眠5s");
sleep(5000l);//不会释放b,所以继续执行
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("1:执行完毕");
}
}
}
结果:
0:进入等待
1:等待取消
1:进入睡眠5s
1:执行完毕
0;执行完毕