public class ThreadCommunication{
public static void main(String[] args) { Queue q = new Queue();//创建,并初始化一个队列 Thread p1 = new Thread(new Product(q));
Thread c1 = new Thread(new Consumer(q)); c1.start();
p1.start();
}
} class Product implements Runnable { Queue q ; //声明队列
public Product(Queue q) {
this.q = q;
} public void run() {
for(int i=1; i<5;i++){
q.put(i);
}
}
}
class Consumer implements Runnable { Queue q ; //声明队列
public Consumer(Queue q) {
this.q = q;
} public void run() {
while(true){
q.get();//循环消费,每次消费了一个元素
}
}
} class Queue {
int value = 0;
boolean isEmpty = true;
//生产方法
public synchronized void put(int v){
if(!isEmpty){
System.out.println("共享数据没有被消费,生产者等待...");
try {
wait();//进入等待状态
} catch (InterruptedException e) {
e.printStackTrace();
}
}
value += v;
isEmpty = false; //不为空了
System.out.println("生产者产品数量:"+value);
notify();//通知消费者
}
//消费方法
public synchronized int get(){ if(isEmpty){
try {
System.out.println("共享数据为空,消费者等待...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
value--;
if(value < 1){
isEmpty = true;
}
System.out.println("消费者消费了一个,剩余:"+value);
notify();
return value;//返回剩余的产品总数
}
}

运行结果:

最新文章

  1. SpringRMI解析2-RmiServiceExporter逻辑脉络
  2. linux ckconfig
  3. SQL Server中,Numric,Decimal,Money三种字段类型的区别
  4. hdu 1879 继续畅通工程 解题报告
  5. JAVA基础知识之JVM-——反射和泛型
  6. SVN提交错误:working copy is not up-to-date解决方法
  7. 当rsync遇到非默认端口的ssh
  8. Rikka with Chess(规律)
  9. launchMode传递参数注意startActivityForResult
  10. 利用JavaScript实现动态显示表格且对应改变按键的value值
  11. fiddler抓手机报文的配置指南
  12. [extjs5学习笔记]第三十七节 Extjs6预览版都有神马新东西
  13. Oracle闪回表
  14. mybatis 开发规范
  15. python小程序打包
  16. [Tom and Bag][需要记录过程的dp]
  17. position:fixed固定定位的用法
  18. [转帖]龙芯下一代处理器微结构GS464E细节曝光
  19. java踩坑
  20. 关于 Thread.currentThread()

热门文章

  1. 微信小程序-T
  2. 338.比特位计数( Counting Bits)leetcode
  3. 【并行计算-CUDA开发】OpenCL、OpenGL和DirectX三者的区别
  4. java按某属性分组并计算相关属性的和。
  5. 一些通用的js工具类,添加自定义插件
  6. 华为wlan配置流程及相关重要步骤AC配置
  7. redis 学习(15)-- GEO
  8. Zookeeper报错Will not attempt to authenticate using SASL解决办法
  9. O001、写在最前面
  10. 基于bootstrap的分页插件