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中的方法,暂停此线程执行时间,期间不会释放当前锁定的对象锁。
示例代码:
结果:
0:进入等待
1:等待取消
1:进入睡眠5s
1:执行完毕
0;执行完毕
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;执行完毕
相关文章推荐
- Java - Thread类的sleep()方法和对象的wait()方法都可以让线程暂停执行,它们有什么区别?
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- java-线程的sleep(),wait(),notify(),yield()方法的区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- JAVA线程sleep和wait方法区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- JAVA线程sleep和wait方法区别
- java线程中sleep与wait方法的区别
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- Java线程中sleep()、wait()和notify()和notifyAll()、yield()、join()等方法的用法和区别
- 一目了然,Java线程各方法区别:sleep, yield, join, wait, notify
- java线程的sleep(),wait(),notify(),yield()方法的区别要点
- JAVA线程sleep和wait方法区别
- 线程系列4---sleep()和wait()方法区别
- java开发线程篇2:sleep() 和 wait() 有什么区别? (做线程的必知!)
- java线程wait与sleep的区别