您的位置:首页 > 编程语言 > Java开发

java线程中wait和sleep方法的区别

2017-04-05 16:08 381 查看
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;执行完毕
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: