Java 创建两个线程模拟对话并交替输出实现解析

 更新时间:2019年10月09日 10:26:30   作者:小龙_T无限  
这篇文章主要介绍了Java 创建两个线程模拟对话并交替输出实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

需求说明

实现方式

嗯 这个可以视作一个经典的消费者和生产者的问题,详细见代码注释

代码内容

消费者,负责取走生产者产生的信息

/**
 * @auther::9527
 * @Description: 消费者
 * @program: 多线程
 * @create: 2019-08-10 10:45
 */
public class Consumer extends Thread{
  private MiddleMan mid = null;


  public Consumer() {
  }

  public Consumer(MiddleMan movie) {
    this.mid = movie;
  }

  @Override
  public void run() {
    //循环显示50次电影信息
    for (int i = 0; i <1000 ; i++) {
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      this.mid.get();
    }
  }
}

生产者,负责生产信息

/**
 * @auther::9527
 * @Description:
 * @program: 多线程
 * @create: 2019-08-10 10:39
 */
public class Producer implements Runnable{
  //生产数据
  private MiddleMan mid = null;
  private boolean flag = false;

  public Producer(MiddleMan movie) {
    this.mid = movie;
  }

  public Producer() {
  }

  @Override
  public void run() {
    //循环录入,两部电影交替录人
    for (int i = 0; i <1000; i++) {
      if (flag){
        this.mid.set("jack说:","我是查水表");
        flag = false;
      } else {
        this.mid.set("rose说:","你是谁啊?");
        flag = true;
      }
    }
  }
}

信息中转场地 负责控制生产和消费的节奏

package com.duo;

/**
 * @auther::9527
 * @Description: 生产者和消费者
 * @program: 多线程
 * @create: 2019-08-10 10:36
 */
public class MiddleMan {
  private String name;
  private String info;
  private boolean flag = true; //设置标志位,控制生产者生产,消费者消费

  public String getName() {
    return name;
  }

  public String getInfo() {
    return info;
  }

  public MiddleMan(String name, String info) {
    this.name = name;
    this.info = info;
  }

  public MiddleMan() {
  }

  public synchronized void set(String name,String info){
    if (!flag){
      try {
        super.wait();  //当前线程等待
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
      this.name = name;
    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
      this.info = info;
    flag = false;  //重置标志位,让消费者消费
    super.notify(); //使用Object的notify方法,让消费者线程被唤醒
  }
  public synchronized void get(){
    if (flag){
      try {
        super.wait();
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
    System.out.println(this.getName()+"-"+this.getInfo());
    flag = true;
    super.notify(); //唤醒线程
  }
}

程序入口

/**
 * @auther::9527
 * @Description: 测试类
 * @program: 多线程
 * @create: 2019-08-10 11:47
 */
public class Test {
  public static void main(String[] args) {
    //生产===>>拿走  生产出来就被拿走
    MiddleMan mid = new MiddleMan();
    Thread producer = new Thread(new Producer(mid));
    Thread consumer = new Thread(new Consumer(mid));
    producer.start();
    consumer.start();
  }
}

运行结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java HttpClient实现socks代理的示例代码

    Java HttpClient实现socks代理的示例代码

    这篇文章主要介绍了Java HttpClient 实现 socks 代理的示例代码,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2020-11-11
  • 使用SpringBoot 配置Oracle和H2双数据源及问题

    使用SpringBoot 配置Oracle和H2双数据源及问题

    这篇文章主要介绍了使用SpringBoot 配置Oracle和H2双数据源及问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java Switch对各类型支持实现原理

    Java Switch对各类型支持实现原理

    这篇文章主要介绍了Java Switch对各类型支持实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Git和Maven的子模块简单实践

    Git和Maven的子模块简单实践

    今天小编就为大家分享一篇关于Git和Maven的子模块简单实践,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • Mybatis中like搭配concat的写法详解

    Mybatis中like搭配concat的写法详解

    这篇文章主要介绍了Mybatis中like搭配concat的写法详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • javaweb上传下载实例完整版解析(上)

    javaweb上传下载实例完整版解析(上)

    这篇文章主要为大家详细解析了javaweb上传下载实例,本文重点在于文件上传功能的实现,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Java通过Freemarker模板实现生成Word文件

    Java通过Freemarker模板实现生成Word文件

    FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本的通用工具。本文将根据Freemarker模板实现生成Word文件,需要的可以参考一下
    2022-09-09
  • 专属于程序员的浪漫-Java输出动态闪图iloveyou

    专属于程序员的浪漫-Java输出动态闪图iloveyou

    这篇文章主要介绍了专属于程序员的浪漫-Java输出动态闪图iloveyou,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • springboot配置文件读取pom文件信息方式

    springboot配置文件读取pom文件信息方式

    这篇文章主要介绍了springboot配置文件读取pom文件信息方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot 配置提示功能(超详细)

    SpringBoot 配置提示功能(超详细)

    这篇文章主要介绍了SpringBoot 配置提示功能,本文给大家介绍的超详细,通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论