首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

sleep() 跟 wait() 有什么区别.

2012-09-05 
sleep() 和 wait() 有什么区别..sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其

sleep() 和 wait() 有什么区别..

sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。 wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

下面是说明这个问题的实例:

?

package pack.java.multithread;public class MultiThread {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//开启线程1;new Thread(new Thread1()).start();try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}//开启线程二;new Thread(new Thread2()).start();}/** * 线程一; * @author zhouhaitao * 2012-2-12 */private static class Thread1 implements Runnable{public void run() {// TODO Auto-generated method stubsynchronized(MultiThread.class){System.out.println("线程1-是等待状态...");try {//等待状态;释放对象锁.给其他线程执行的机会;MultiThread.class.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程1-执行完成!");}}}private static class Thread2 implements Runnable{public void run() {// TODO Auto-generated method stubsynchronized (MultiThread.class) {System.out.println("线程2-通知其他线程可以释放等待状态...");//调用notify方法不释放锁;MultiThread.class.notify();//休眠10毫秒;给其他线程执行机会.try {Thread.sleep(10);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println("线程2-执行完成!");}}}}

?

?

输出结果:

线程1-是等待状态...
线程2-通知其他线程可以释放等待状态...
线程2-执行完成!
线程1-执行完成!

热点排行