软件编程
位置:首页>> 软件编程>> java编程>> Java 创建两个线程模拟对话并交替输出实现解析

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

作者:小龙_T无限  发布时间:2022-01-10 02:37:02 

标签:java,创建,线程,模拟,对话,输出

需求说明

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 创建两个线程模拟对话并交替输出实现解析

来源:https://www.cnblogs.com/twuxian/p/11331077.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com