Flask接口签名sign原理与实例代码浅析
240
2022-12-25
Java 创建两个线程模拟对话并交替输出实现解析
需求说明
实现方式
嗯 这个可以视作一个经典的消费者和生产者的问题,详细见代码注释
代码内容
消费者,负责取走生产者产生的信息
/**
* @auther::9527
* @Description: 消费者
* @program: 多线程
* @create: 2019-08-10 10:45
*/
public class Conhttp://sumer 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();
}
}
运行结果
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~