方法 trace 意思 等待 什么 art void .com
对于 sleep() 方法,我们首先要知道该方法是属于 Thread 类中的。而 wait() 方法,则是属于 Object 类中的。
sleep() 方法导致了程序暂停执行指定的时间,让出 cpu 该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
在调用 sleep() 方法的过程中,线程不会释放对象锁。
而当调用 wait() 方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用 notify() 方法后本线程才进入对象锁定池准备
获取对象锁进入运行状态。
什么意思呢?
举个列子说明:
- /**
- *
- */
- package com.b510.test;
- /**
- * java中的sleep()和wait()的区别
- * @author Hongten
- * @date 2013-12-10
- */
- public class TestD {
- public static void main(String[] args) {
- newThread(new Thread1()).start();
- try {
- Thread.sleep(5000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- newThread(new Thread2()).start();
- }
- private static classThread1implements Runnable{
- @Override
- public void run(){
- synchronized(TestD.class) {
- System.out.println("enter thread1...");
- System.out.println("thread1 is waiting...");
- try {
- //调用wait()方法,线程会放弃对象锁,进入等待此对象的等待锁定池TestD.class.wait();
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("thread1 is going on ....");
- System.out.println("thread1 is over!!!");
- }
- }
- }
- private static classThread2implements Runnable{
- @Override
- public void run(){
- synchronized(TestD.class) {
- System.out.println("enter thread2....");
- System.out.println("thread2 is sleep....");
- //只有针对此对象调用notify()方法后本线程才进入对象锁定池准备获取对象锁进入运行状态。TestD.class.notify();
- //==================
- //区别
- //如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify()
- //方法,则线程永远处于挂起状态。
- try {
- //sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,
- //但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态。
- //在调用sleep()方法的过程中,线程不会释放对象锁。Thread.sleep(5000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- System.out.println("thread2 is going on....");
- System.out.println("thread2 is over!!!");
- }
- }
- }
- }
运行效果:
- enter thread1...
- thread1 is waiting...
- enter thread2....
- thread2 is sleep....
- thread2 is going on....
- thread2 is over!!!
- thread1 is going on ....
- thread1 is over!!!
如果注释掉代码:
- //TestD.class.notify();
- enter thread1...
- thread1 is waiting...
- enter thread2....
- thread2 is sleep....
- thread2 is going on....
- thread2 is over!!!
且程序一直处于挂起状态。
来源: http://www.bubuko.com/infodetail-2013057.html