java多线程之线程状态(3)
来源:互联网 发布:阿里云邮箱登陆 编辑:程序博客网 时间:2024/05/18 22:54
转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/43247307
作者:小马
本篇是wait和notify方式的线程阻塞示例,
与前面几种方法不同的是,wait()与notify()必须要与synchronized(Obj)一起使用,也就是wait,与notify是针对已经获取了Obj锁进行操作,从语法角度来说就是Obj.wait(),Obj.notify必须在synchronized(Obj){...}语句块内。
wait就是说线程在获取对象锁后,主动释放对象锁,同时本线程休眠,而notify是让调用它的线程对象唤醒(当然是在其它线程里调用的)。
先看代码,还是两个类,
//wait and nofityclass WaitNotify1 extends Blockable{public WaitNotify1(Container c){super(c);}public synchronized void run(){while(true){i++;update();try {wait(100);} catch (InterruptedException e) {System.err.println("interrupted");}}}}class WaitNotify2 extends Blockable{public WaitNotify2(Container c){super(c);new Notifier(this);}public synchronized void run(){while(true){i++;update();try {wait();} catch (InterruptedException e) {System.err.println("interrupted");}}}}class Notifier extends Thread{private WaitNotify2 wn2;public Notifier(WaitNotify2 wn2){this.wn2 = wn2;start();}public void run(){while(true){try {sleep(2000);} catch (InterruptedException e) {System.err.println("interrupted");}synchronized (wn2) {wn2.notify();}}}}
类1和类2的主要区别在于, 类2有一个notifer对象能每隔2s唤醒它一次,因为类2休眠调用的是不带参数的wait,这种只能被主动唤醒。
运行的效果如下:
0 0
- java多线程之线程状态(3)
- java多线程之线程状态
- Java多线程之线程状态
- java多线程之线程状态
- java多线程:3 线程状态
- java多线程之线程状态(2)
- java 多线程之线程的状态
- Java多线程之线程状态转换
- (14)Java多线程之线程状态
- java多线程之线程运行状态
- Java多线程之线程状态案例
- 二.java多线程之线程状态转换
- Java多线程:线程状态
- java多线程-线程状态
- Java多线程:线程状态
- Java多线程:线程状态
- Java多线程:线程状态
- Java多线程:线程状态
- sql语句中select top n与oracle的rownum与mysql的limit用法
- 使Eclipse符合Java编程规范(转)
- RESTful Web Services初探
- hadoop-2.6集群安装
- qsort的用法大全
- java多线程之线程状态(3)
- 入门: 如何在xampp中运行php文件 (WINDOWS)
- 基于链表的四位存储大数计算
- 嵌入式学习方法及概要
- 简易解说拉格朗日对偶(Lagrange duality)
- 让数据库变快的10个建议
- opencv背景建模mog2源码剖析
- 【数据结构】链式存储单链表
- 解决thinkphp display输出问题