Java基础笔记-第八记
来源:互联网 发布:易吧进销存软件 编辑:程序博客网 时间:2024/06/06 05:03
Java 线程
wait()
notify()
notifyAll()
都使用在同步中,因为要对持有监视器的线程操作
所以要使用在同步中,因为只有同步才具有锁
为什么这些操作的方法要定义Object类中呢?
因为这些方法在操作同步中线程时,都必须要标识它们所操作线程只有的锁
只有同一个锁上的被 等待纯种,可以被同一个锁上notify() 唤醒
不可以对不同锁中的线程进行唤醒
也就是说,等待和唤醒的必须是同一个锁
例如:
class Res{ //添加资源类private String name;private String sex;//添加同步锁方法,用于设置姓名和年龄public synchronized void set(String name,String sex) {this.name = name;this.sex = sex;}//输出姓名和年龄public void out(){System.out.println(name+"...."+sex);}boolean flag = false; //标识是否已设置,true为已设置,false为未设置}class Input implements Runnable{ //输入线程private Res r ; //引用资源类Input(Res r){ //构造this.r = r;}@Overridepublic void run() { //线程boolean b = true; //用于交替添加while(true){synchronized(r){if(r.flag){try { r.wait();} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}if(b){r.set("jack", "男");b = false;} else{r.set("lili", "女");b = true;}r.flag = true; //标识为已设置r.notify();//唤醒另一个线程,注意,另一个线程锁定的是同一个对象,否则无法唤醒}}}}class Output implements Runnable{ //输出线程private Res r;Output(Res r){this.r = r;}@Overridepublic void run() {while(true){synchronized(r){ //线程锁if(!r.flag){//判断如果没有设置try {r.wait(); //则当前线程等待} catch (InterruptedException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}r.out(); //打印内容r.flag = false; //打印完成设置标识r.notify(); //唤醒另一个在同一个锁的线程}}}}public class Demo1 {public static void main(String[] args) {Res r = new Res();//创建一个对象,唯一的Input in = new Input(r); //创建输入线程,将对象传入,此时该线程则以该对象为锁Output out = new Output(r);//创建输出线程,将对象传入,此时该线程则以该对象为锁Thread t1 = new Thread(in);Thread t2 = new Thread(out);t1.start();t2.start();}}
0 0
- Java基础笔记-第八记
- Java基础第八讲
- Java SE 学习笔记 第八记
- 【Java 基础篇】【第八课】package包
- JavaWeb学习笔记 第八记
- 笔记:第八讲 Java网络编程
- Think in java第八章笔记
- Java基础笔记-第一记
- Java基础笔记-第二记
- Java基础笔记-第三记
- Java基础笔记-第四记
- Java基础笔记-第五记
- Java基础笔记-第六记
- Java基础笔记-第七记
- Java基础笔记-第九记
- Java基础笔记-第十记
- Java基础笔记-第十一记
- Java基础笔记-第十二记
- BZOJ 2287: 【POJ Challenge】消失之物
- 微信公众号开发系列-发送客服消息
- 【重磅】移动网络性能揭秘(下)--网络协议及性能提升实践
- Intent Action 大全
- 初探java 对象中wait(),notify(),notifyAll() 和线程中的synchronized
- Java基础笔记-第八记
- Linux 学习点滴
- poj1459(Power Network)网络最大流
- android自定义Seekbar
- poj 3083 children of the candy corn
- N!(1042)hdu(大数阶乘)
- [转]java中byte转换int时为何与0xff进行与运算
- iocp例子
- Hanlde消息处理机制的复习——网络图片下载