java中sleep和wait区别

java中sleep和wait区别参考 http dylanxu iteye com blog demo publicclassT publicstatic String args ThreadRunnab newThreadRun Threadth1 newThread runable

参考:http://dylanxu.iteye.com/blog/

demo:

public class ThreadDemo { public static void main(String[] args) { ThreadRunnable runable = new ThreadRunnable(); Thread th1 = new Thread(runable); Thread th2 = new Thread(runable); th1.setName("th1"); th2.setName("th2"); th1.start(); th2.start(); } } class ThreadRunnable implements Runnable { private int i = 10; public synchronized void run() { while (i > 0) { i -= 1; try { Thread.sleep(1000); if(Thread.currentThread().getName().equals("th1") && i == 5){ Thread.currentThread().sleep(10000); // Thread.currentThread().wait(); //打开这一行,关闭上一行,观察区别 } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("name:" + Thread.currentThread().getName() + "\n" + "i:" + i); } } } 

当用以上sleep时结果:

name:th1 i:9 name:th1 i:8 name:th1 i:7 name:th1 i:6 /*此处等待了10s/ name:th1 i:5 name:th1 i:4 name:th1 i:3 name:th1 i:2 name:th1 i:1 name:th1 i:0

当用以上代码的wait,关闭sleep时:

name:th1 i:9 name:th1 i:8 name:th1 i:7 name:th1 i:6 Exception in thread "th1" java.lang.IllegalMonitorStateException at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Unknown Source) at ThreadRunnable.run(ThreadDemo.java:26) at java.lang.Thread.run(Unknown Source) /th2可以执行,说明th1调用wait已经释放了资源*/ name:th2 i:4 name:th2 i:3 name:th2 i:2 name:th2 i:1 name:th2 i:0

sleep()

使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。

wait()

方法使当前线程暂停执行并释放对象锁标示,让其他线程可以进入synchronized数据块。


区别:1.sleep是thread 的方法,而wait是object的方法。

          2.当有synchronized时sleep并不释放资源,而wait会释放资源。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226309.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午11:51
下一篇 2026年3月16日 下午11:51


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号