java基础知识回顾之java Thread类学习(九)--wait和notify区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java基础知识回顾之java Thread类学习(九)--wait和notify区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1776字,纯文字阅读大概需要3分钟。
内容图文
wait和sleep区别:
- 相同点:调用wait,sleep方法都可以是线程进入阻塞状态,让出cpu的执行权。
- 不同点:1.sleep必须指定时间,但是wait方法可以指定时间,也可以不指定时间。
2.wait方法必须在同步中使用,但是sleep不一定在同步中使用。
3.在同步中,调用sleep方法释放CPU执行权,但是不会释放锁,即使让出了CPU执行权,其它线程也无法进入同步锁,不能得到执行。但是wait 方法不仅释放CPU执行权,而且释放同步锁,进入阻塞状态。也就是说其它等待此锁的线程可以得到同步锁并运行,阻塞的线程要想再次获得 CPU资格执行必须让其他线程调用notify方法唤醒。
package com.lp.ecjtu.Thread; public class WaitOrSleep { private static class Thread1 implements Runnable{ @Override publicvoid run() {
//由于这里的Thread1和下面的Thread2内部的run方法要用同一个对象作为锁(监视器)
//这里不能用this,因为Thread2里面的this和Thread1里面的this不是同一个对象
//用WaitOrSleep.class这个字节码对象,因为引用的是同一个对象 synchronized(WaitOrSleep.class){ System.out.println("进入线程1----------"); System.out.println("线程1----------wait"); try { WaitOrSleep.class.wait();//释放锁 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println("线程1正在运行。。。。。。。。。"); System.out.println("线程1结束"); } } } privatestaticclass Thread2 implements Runnable{ @Override publicvoid run() { synchronized(WaitOrSleep.class){ System.out.println("进入线程2----------"); System.out.println("线程2唤醒其它线程。。。。。。"); WaitOrSleep.class.notify();//线程2唤醒其其它线程 //由于notify并不释放锁,让线程2睡10毫秒,因为Sleep方法也不会释放锁,所以线程1不会执行 //等到线程2执行完了,才释放锁,线程1才执行try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("线程2正在运行。。。。。。。。。"); System.out.println("线程2结束"); } } } /** * @param args */publicstaticvoid main(String[] args) { new Thread(new Thread1()).start(); new Thread(new Thread2()).start(); } }
输出结果:
进入线程1----------
线程1----------wait
进入线程2----------
线程2唤醒其它线程。。。。。。
线程2正在运行。。。。。。。。。
线程2结束
线程1正在运行。。。。。。。。。
线程1结束
大家通过本来应该完全明白了其区别。。。。。。。
原文:http://www.cnblogs.com/200911/p/3928967.html
内容总结
以上是互联网集市为您收集整理的java基础知识回顾之java Thread类学习(九)--wait和notify区别全部内容,希望文章能够帮你解决java基础知识回顾之java Thread类学习(九)--wait和notify区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。