JAVA中sleep() 和 wait() 有什么区别?

package com.huawei.interview;public class MultiThread {public static void main(String[] args) {new Thread(new Thread1()).start();try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}new Thread(new Thread2()).start();}private static class Thread1 implements Runnable {@Overridepublic void run() {synchronized (MultiThread.class) {System.out.println("enter thread1…");System.out.println("thread1 is waiting");try {MultiThread.class.wait();/*[释放锁有两种方式,第一种方式是程序自然离开监视器的范围,,也就是离开了synchronized关键字管辖的代码范围,另一种方式就是在synchronized关键字管辖的代码内部调用监视器对象的wait方法。这里,使用wait方法释放锁。*/} catch (InterruptedException e) {e.printStackTrace();}System.out.println("thread1 is going on…");System.out.println("thread1 is being over!");}/*由于这里的Thread1和下面的Thread2内部run方法要用同一对象作为监视器,我们这里不能用this,因为在Thread2里面的this和这个Thread1的this不是同一个对象。我们用MultiThread.class这个字节码对象,当前虚拟机里引用这个变量时,指向的都是同一个对象。*/}}private static class Thread2 implements Runnable {@Overridepublic void run() {synchronized (MultiThread.class) {System.out.println("enter thread2…");System.out.println("thread2 notify other thread can release wait status..");MultiThread.class.notify();/*由于notify方法并不释放锁, 即使thread2调用下面的sleep方法休息了10毫秒,但thread1仍然不会执行,因为thread2没有释放锁,所以Thread1无法得不到锁。*/System.out.println("thread2 is sleeping ten millisecond…");try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("thread2 is going on…");System.out.println("thread2 is being over!");}}}}

版权声明:本文为博主原创文章,未经博主允许不得转载。

君子无故,玉不去身。

JAVA中sleep() 和 wait() 有什么区别?

相关文章:

你感兴趣的文章:

标签云: