java中的sleep()和wait()的区别
2018-10-15 23:32
288 查看
区别
- 这两个方法来自不同的类分别是Thread和Object
- 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法(锁代码块和方法锁)。
- wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
- sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
例子
package wait_sleep; /** * java中的sleep()和wait()的区别 * @author Hongten * @date 2013-12-10 */ public class TestD { public static void main(String[] args) { new Thread(new Thread1()).start(); try { Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } new Thread(new Thread2()).start(); } private static class Thread1 implements 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 class Thread2 implements Runnable{ @Override public void run(){ synchronized (TestD.class) { System.out.println("enter thread2...."); System.out.println("thread2 is sleep...."); try { //在调用sleep()方法的过程中,线程不会释放对象锁。 Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } System.out.println("thread2 is going on...."); System.out.println("thread2 is over!!!"); //如果我们把代码:TestD.class.notify();给注释掉,即TestD.class调用了wait()方法,但是没有调用notify() //方法,则线程永远处于挂起状态。 TestD.class.notify(); } } } }
相关文章推荐
- Java线程中sleep和wait的区别详细介绍
- Java中sleep()与wait()的区别
- Java中sleep,wait,yield,join的区别
- java sleep(),wait(),notify()函数区别
- java 中的 wait()方法和 sleep()方法的区别
- java线程同步原理及wait,notify的用法及与sleep的区别
- Java Thread(线程)案例详解sleep和wait的区别
- java object的wait和Thread的sleep方法区别
- JAVA -- 线程wait()和sleep()的区别
- Java Thread(线程)sleep和wait的区别浅析
- 【Java之多线程(二)】(***重要***)Java多线程中常见方法的区别,如object.wait()和Thread.sleep()的区别等
- java之yield(),sleep(),wait()区别详解
- java多线程中yield(),sleep(),wait()区别
- java中的sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- Java线程中sleep和wait的区别
- java之yield(),sleep(),wait()区别详解
- java多线程 sleep()和wait()的区别
- java多线程 sleep()和wait()的区别
- Java中sleep()和wait()的区别