博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【未完】Java--线程之间的通信
阅读量:5080 次
发布时间:2019-06-12

本文共 3266 字,大约阅读时间需要 10 分钟。

不带生产者和消费者之间的通信:

1   2 class SynchronizedMethods{ 3     int d; 4     synchronized void getDate() { 5         System.out.println("Got data:"+d); 6     } 7     synchronized void putdata(int d) { 8         this.d=d; 9         System.out.println("Put data:"+d);10     }11 }12 class  Producer extends Thread{13     SynchronizedMethods t;14     public Producer (SynchronizedMethods t) {15         this.t=t;16     }17     public void run() {18         int data=700;19         while(true ) {20             System.out.println("Put called by producer");21             t.putdata(data++);22         }23     }24     25 }26 class Consumer extends Thread {27     SynchronizedMethods t;28     public Consumer(SynchronizedMethods t) {29         this.t=t;30     }31     public void run() {32         while(true) {33             System.out.println("Get called by consumer");34             t.getDate();35         }36     }37 }38 public class ProducerConsumer {39     public static void main(String args[]) {40         SynchronizedMethods obj1=new SynchronizedMethods();41         Producer p=new Producer(obj1);42         Producer c=new Producer(obj1);43         p.start();44         c.start();45     }46 }
View Code

无限循环

测试结果:

 

带有生产者和消费真之间的通信:

1  class SynchronizedMethods{ 2     int d ; 3     boolean flag=false ;//有无数据,初值为无数据 4     //由消费者调用 5     synchronized int getData() { 6         if(!flag) {
//无数据情况下 7 try { 8 wait();//消费者等待 9 }10 catch(InterruptedException e) {11 System.out.println("Exception caught");12 }13 }14 System.out.println("Got data:"+d);15 flag =false ;16 notify();17 return d;18 }19 20 //生产者21 synchronized void putData(int d) {22 if(flag) {
//you 数据情况下23 try {24 wait();//生产者等待25 }26 catch(InterruptedException e) {27 System.out.println("Exception caught");28 }29 }30 this.d=d;//成员变量的值赋值为d31 flag =true;32 System.out.println("put data:"+d);33 notify();//唤醒消费者34 }35 }36 37 class Producer implements Runnable { 38 SynchronizedMethods t;39 public Producer (SynchronizedMethods t) {40 this.t=t;41 new Thread (this ,"Producer").start();42 System.out.println("Put calledby producer");43 }44 public void run() {45 int data =0;46 while(true) {47 data=data+1;48 t.putData(data);49 }50 }51 }52 53 class Consumer implements Runnable { 54 SynchronizedMethods t;55 public Consumer(SynchronizedMethods t) {56 this.t=t;57 new Thread (this ,"Consumer").start();58 System.out.println("Put calledby producer");59 }60 public void run() {61 62 while(true) {63 t.getData();64 }65 }66 67 }68 69 public class InterThreadComm{70 public static void main(String args[]) {71 SynchronizedMethods obj1=new SynchronizedMethods();72 Producer p=new Producer(obj1);73 Consumer c=new Consumer(obj1);74 }75 }
View Code

测试结果:

 

转载于:https://www.cnblogs.com/Catherinezhilin/p/9056812.html

你可能感兴趣的文章
解决ubuntu10插入耳机还有外音的问题
查看>>
自用win10软件
查看>>
Hive异常- requestedMemory=1536, maxMemory=1024
查看>>
python 选择排序
查看>>
win10上安装keras
查看>>
K米评测
查看>>
系统获取 IP 工具类
查看>>
Ext中何时会自动去执行destroy方法
查看>>
mybatis实战教程(mybatis in action)之六:与Spring MVC 的集成
查看>>
angularJs项目实战!04:angularjs的性能问题
查看>>
关于奎宇工作室
查看>>
UVA 1646 - Edge Case(找规律)
查看>>
U-Boot工作过程
查看>>
js函数基础回顾
查看>>
JAVA_HOME环境变量不起作用
查看>>
转:Android设置全局变量
查看>>
Djiango ajax请求数据/分页器
查看>>
Java并发--并发容器之CopyOnWriteArrayList
查看>>
手机号二要素实名认证
查看>>
图像特征提取三大法宝:HOG特征,LBP特征,Haar特征
查看>>