主要通过wait()和notify()方法进行线程间的通讯

class Product extends Thread{

	String name;
float price;
boolean flag = false; } class Productor extends Thread{ Product p; public Productor(Product p) { this.p = p; }
int i = 0;
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
synchronized(p){
//通知生产者生产
//p.notify();
if(!p.flag){
if(i%2 == 0){
p.name = "苹果";
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
p.price = 4.5f;
System.out.println("生产者生产了"+p.name+" 价格是"+p.price);
}
else{
p.name ="香蕉";
p.price = 2.5f;
System.out.println("生产者生产了"+p.name+" 价格是"+p.price);
}
i++;
p.flag = true;
p.notify(); }else{
//生产了产品后等待消费者消费
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
} } class Consumer extends Thread{ Product p;
public Consumer(Product p) { this.p = p; }
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
synchronized(p){
//通知启动消费者消费
//p.notify();
if(p.flag){
System.out.println("消费者消费了"+p.name+"价格是"+p.price);
p.flag = false;
p.notify();
}else{
//消费了产品后等待生产者生产
try {
p.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

  

//main方法
public static void main(String[] args) { Product p = new Product(); Productor productor = new Productor(p);
Consumer consumer = new Consumer(p);
productor.start();
consumer.start(); }

  

java线程间的通讯的更多相关文章

  1. Java 线程间通讯(管道流方式)

    一.管道流是JAVA中线程通讯的常用方式之一,基本流程如下: 1)创建管道输出流PipedOutputStream pos和管道输入流PipedInputStream pis 2)将pos和pis匹配 ...

  2. Java 线程间通讯(共享变量方式)

    Java线程间通讯,最常用的方式便是共享变量方式,多个线程共享一个静态变量就可以实现在线程间通讯,但是这需要注意的就是线程同步问题. 一.没考虑线程同步: package com.wyf; publi ...

  3. Java线程间通信-回调的实现方式

    Java线程间通信-回调的实现方式   Java线程间通信是非常复杂的问题的.线程间通信问题本质上是如何将与线程相关的变量或者对象传递给别的线程,从而实现交互.   比如举一个简单例子,有一个多线程的 ...

  4. Java线程间和进程间通信

    1 线程与线程间通信 1.1 基本概念以及线程与进程之间的区别联系 关于进程和线程,首先从定义上理解就有所不同: 进程是具有一定独立功能的程序.它是系统进行资源分配和调度的一个独立单位,重点在系统调度 ...

  5. 说说Java线程间通信

    序言 正文 [一] Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在 ...

  6. 说说 Java 线程间通信

    序言 正文 一.Java线程间如何通信? 线程间通信的目标是使线程间能够互相发送信号,包括如下几种方式: 1.通过共享对象通信 线程间发送信号的一个简单方式是在共享对象的变量里设置信号值:线程A在一个 ...

  7. JMM之Java线程间通讯——等待通知机制及其经典范式

    在并发编程中,实际处理涉及两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体). 通信是指线程之间以何种机制来交换信息.在共享内存的并发模型里,线程之间共享程序的公共状 ...

  8. Java 线程间通讯

    /* 线程间通讯: 多个线程在处理同一资源,但是任务却不同. */ package com.cwcec.test; class Input implements Runnable { Resource ...

  9. Java线程间通信方式剖析——Java进阶(四)

    原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...

随机推荐

  1. 套接字之send系统调用

    send系统调用只是对sendto系统调用进行了封装,传递的参数不包含目的地址信息,数据会发送到已经建立连接的另一端的地址: /* * Send a datagram down a socket. * ...

  2. Scala学习(四)——模式匹配与函数组合

    函数组合 让我们创建两个函数: def f(s: String) = "f(" + s + ")" def g(s: String) = "g(&qu ...

  3. ubuntu 16.04 安装最新的 docker

      转载地址:https://www.cnblogs.com/tianhei/p/7802064.html 本文将介绍在ubuntu16.04系统下安装和升级docker.docker-compose ...

  4. 分组 vs 联合

    // 分组 function groupBy(groups) { return groups.reduce((pre, cur) => { pre[cur.groupId] = (pre[cur ...

  5. linux添加新用户

    使用root用户adduser yj 后面操作有提示 用这种方法新建的用户会在home下生成用户文件夹

  6. PermissionUtils

    import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; im ...

  7. 如何在Ubuntu / CentOS 6.x上安装Bugzilla 4.4

    这里,我们将展示如何在一台Ubuntu 14.04或CentOS 6.5/7上安装Bugzilla.Bugzilla是一款基于web,用来记录跟踪缺陷数据库的bug跟踪软件,它同时是一款免费及开源软件 ...

  8. fastcgi_params 与 fastcgi.conf的区别

    参照文档: http://blog.51cto.com/noican/1766676

  9. :成功配置 centos + nginx + .net core 2.0

    https://segmentfault.com/a/1190000010763523

  10. illustrator 偏方

    视图 边角构件  - - 这个是显示边角弧度的