线程的通信
来源:互联网 发布:怎么学游戏编程 编辑:程序博客网 时间:2024/06/05 01:06
其实就是多个线程在操作同一个资源,但是操作的动作不一样
等待唤醒机制
wait;
notify();
notifyAll();都是用在同步中,因为要对持有监视器(锁)的线程操作,所以都要使用在同步中,因为只有同步才具有锁
为什么这些操作线程的方法要定义在Object类中呢?
因为这些方法在操作同步中线程时,都必须要标识他们所操作线程持有的锁, 只有同一个锁上的被等待线程,可以被同一个锁上的notify唤醒 不可以对不同锁中的线程进行唤醒 也就是说,等待和唤醒必须是同一个锁 而锁可以是任意对象,所以可以被任意对象调用的方法定义在Object类中
public static void main(String[] args) { Res r = new Res(); new Thread(new Input(r)).start(); new Thread(new Output(r)).start();}
class Res { private String name; private String sex; boolean flag = false; public synchronized void set(String name, String sex) { if(flag) { try { this.wait(); } catch (Exception e) { System.out.println(e.toString()); } } this.name = name; this.sex = sex; flag = true; this.notify(); } public synchronized void out() { if(!flag) { try { this.wait(); } catch (Exception e) { System.out.println(e.toString()); } } System.out.println(name+" "+sex); this.flag = false; this.notify(); }}
class Input implements Runnable { private Res r; Input(Res r) { this.r = r; } public void run() { int x = 0; boolean b = true; while(true) { if(x == 0){ r.set("mike", "man"); }else{ r.set("丽丽", "女"); } x = (x+1)%2; } }}
class Output implements Runnable { private Res r; Output(Res r) { this.r = r; } public void run() { while(true) { r.out(); } }}
0 0
- 线程通信---传统的线程通信
- 线程间的通信
- 线程之间的通信
- 线程的通信
- 线程间的通信
- 线程间的通信
- 线程之间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程之间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程间的通信
- 线程的通信
- 线程之间的通信
- DDMS files not found:.....hprof-conv.exe
- 文件夹的拷贝
- eclipse恢复界面默认设置
- 单例设计模式
- 蓝桥杯 ADV-179 算法提高 解二元一次方程组
- 线程的通信
- Python 正则表达式
- 线程的通信-生产者消费者
- 网络流24题23. 火星探险问题
- Android Studio安装genymotion插件
- leetcode513
- AndroidStudio修改主题外观和字体大小
- CString 与 LPCTSTR 的区别
- 【Mybatis】深入浅出Mybatis(一)——前言小序