package com.mayikt.thread.days02;
/**
* @author 余胜军
* @ClassName Thread04
* @qq 644064779
* @addres www.mayikt.com
* 微信:yushengjun644
*/
public class Thread04 {
/**
* 共享对象 res
*/
class Res {
public String userName;
public char sex;
/**
* flag 默认值==false
* flag false 输入线程 输入值 输出线程
* flag true 输出线程 输出值
*/
public boolean flag = false;
}
/**
* 第一次 输出余胜军,男
* 第二次 输出小薇,女
* 第三次 输出余胜军,男
* 第四次 输出小薇,女
*/
class InputThread extends Thread {
private Res res;
public InputThread(Res res) {
this.res = res;
}
@Override
public void run() {
int count = 0;
while (true) {
synchronized (res) {
if (res.flag) {
try {
res.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
if (count == 0) {
res.userName = "余胜军";
res.sex = '男';
} else {
res.userName = "小薇";
res.sex = '女';
}
// 输出线程 输出值
res.flag = true;
// 唤醒输出线程
res.notify();
}
// 1%2 = 2%2 3%2 4%2=
count = (count + 1) % 2;
}
}
}
/**
* 输出的线程
*/
class OutPutThread extends Thread {
private Res res;
public OutPutThread(Res res) {
this.res = res;
}
@Override
public void run() {
while (true) {
synchronized (res) {
if (!res.flag) {
// 如果 res.flag=false 则 输出的线程 主动释放锁 同时会阻塞该线程
try {
res.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(res.userName + "," + res.sex);
// 输出完毕 交给我们的输入线程继续的输入
res.flag = false;
res.notify();;
}
}
}
}
public static void main(String[] args) {
new Thread04().print();
}
public void print() {
// 全局对象
Res res = new Res();
// 输入线程
InputThread inputThread = new InputThread(res);
OutPutThread outPutThread = new OutPutThread(res);
inputThread.start();
outPutThread.start();
}
}
wait、notify生产者与消费者模型
原创
©著作权归作者所有:来自51CTO博客作者angdh的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
chan实现生产者消费者模型
一个简单的例子让你更好的理解golang chan的使用
斐波拉契数列 斐波那契数列 Group -
java 生产者和消费者模型 java生产者与消费者
生产者-消费者模式是一个十分经典的多线程并发协作的模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深。所谓生产者-消费者问题,实际上主要是包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为;而消费者只需要从共享数据区
java 生产者和消费者模型 java 生产者消费者 java生产者消费者代码 生产者消费者代码 生产者消费者代码c语言 -
python 生产者消费者模型 semaphore生产者消费者
Semaphore)是实现多线程同步的两种常用的手段。信号量需要初始化一个许可值,许可值可以大于0,也可以小于0,也可以等于0.
python 生产者消费者模型 Apple 信号量 System -
android 图形生产者消费者模型 生产者消费者模型死锁
*同步一般都是外层是while循环,里面是同步代码块,再里面是循环*不安全与死锁都因为在判断中出错死锁举例:package com.qianfeng.demo02;class DeadLockThread implements Runnable { private static String milk = "牛奶"; private static String bread = "面包"
android 图形生产者消费者模型 java死锁举例 生产消费者模式 System List Customer -
docker容器对硬件要求
此内容基于《第一本docker书》总结,内容次序不是很规范,按照书籍内容介绍部分有添加: docker子命令概览 子命令分类  
docker容器对硬件要求 运维 shell 数据库 docker