线程审查生产者和消费者

线程审查生产者和消费者

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

采纳JAVA多线程技术,设计和实施符合节目制作商和消费者问题:桶的操作,它的最大容量为12子弹,生产者线程被压入螺纹,它被压入腔室,以保持子弹。消费者线程是线程退出。它在不断射出的子弹从室。

public class ShengChanZheXiaoFeiZhe {

	public static void main(String[] args) {
		Container c = new Container();
		BulletProducer producer = new BulletProducer(c);
		BulletConcumer consumer = new BulletConcumer(c);
		Thread t1 = new Thread(producer);
		Thread t2 = new Thread(consumer);
		t1.start();
		t2.start();
	}

}
//子弹类,id为序号
class Bullet{
	int id;
	Bullet(int id){
		this.id = id;
	}
	//重写toString方法。便于显示子弹序号。
	@Override
	public String toString() {
		return "第"+id+"个子弹";
	}
}
//装子弹的容器。具备一定空间。含有装子弹和发子弹的同步方法(是一个栈),方法须要推断栈的空和满,并使用等待唤醒机制控制。
class Container{
	Bullet[] arr = new Bullet[12];
	int index = 0;
	public synchronized void push(Bullet bullet){
		while(index==arr.length){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();
		arr[index] = bullet;
		index++;
	}
	public synchronized Bullet pop(){
		while(index==0){
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		this.notify();
		index--;
		return arr[index];
	}
}
//生产者。须要被一个线程运行故实现runnable接口,run方法中初始化子弹容器,不断建立子弹对象并向容器中push,并输出子弹序号。

class BulletProducer implements Runnable{ Container c = null; public BulletProducer(Container c) { this.c = c; } public void run(){ int i = 0; while(true){ Bullet bullet = new Bullet(++i); c.push(bullet); System.out.println("上膛"+bullet); } }}//消费者,也实现了runnable,建立容器,不断从容器中pop子弹。并输出子弹序号。class BulletConcumer implements Runnable{ Container c = null; public BulletConcumer(Container c) { this.c = c; } public void run(){ while(true){ Bullet bullet = c.pop(); System.out.println("->->->->->->发射"+bullet); } }}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117358.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月6日 下午9:00
下一篇 2022年1月6日 下午10:00


相关推荐

  • 经典智能算法之粒子群算法详解

    经典智能算法之粒子群算法详解经典智能算法之粒子群算法要理解粒子群算法怎么可能没有算法背景,请看算法历史粒子群优化(ParticleSwarmOptimization,PSO)算法是Kennedy和Eberhart受人工生命研究结果的启发、通过模拟鸟群觅食过程中的迁徙和群聚行为而提出的一种基于群体智能的全局随机搜索算法。自然界中各种生物体均具有一定的群体行为,而人工生命的主要研究领域之一是探索自然界生物的群体行为…

    2022年6月6日
    125
  • python测试系列教程——python+Selenium+chrome自动化测试框架

    python测试系列教程——python+Selenium+chrome自动化测试框架全栈工程师开发手册(作者:栾鹏)python教程全解需要的环境浏览器(Firefox/Chrome/IE..)PythonSeleniumSeleniumIDE(如果用Firefox)FireBug、FirePath(如果用Firefox)chromedriver、IEDriverServer、phantomjs.exeIDE(Pycharm/Subl…

    2022年4月29日
    62
  • this关键字、this关键字应用

    this关键字、this关键字应用一 this 关键字 1 需求 使用 java 类描述一个动物 1 问题分析 存在同名的成员变量与局部变量时 在方法的内部访问的是局部变量 java 采取的是就近原则的机制访问的 2 内存分析 2 this 关键字代表了所属函数的调用者对象 解释 哪个对象调用这个函数 this 就代表哪个对象 3 this 关键字作用 1 如果存在同名成员变量与局部变量时 在方法内部默认是访问

    2026年3月16日
    2
  • matlab中acos得到的弧度范围,matlab角度弧度

    matlab中acos得到的弧度范围,matlab角度弧度MATLAB 中 FFT 的使用方法 数学 自然科学 专业资料 MATLAB 中 4 3Matlab 应用利用 Matlab 编制程序 由 1 个主程序 5 个子程序组成 主程序为 curve m 子程序分别为角度转换成弧度子程序 degrad m 弧度转换成角度子程序 再计算 75Hz 信号的相位 atan2 192 3 4315E 12 1 5708 弧度 换算成角度就是

    2025年11月24日
    7
  • c语言 多线程(详)

    c语言 多线程(详)什么是线程 线程的优点是什么线程在 Unix 系统下 通常被称为轻量级的进程 线程虽然不是进程 但却可以看作是 Unix 进程的表亲 同一进程中的多条线程将共享该进程中的全部系统资源 如虚拟地址空间 文件描述符和信号处理等等 但同一进程中的多个线程有各自的调用栈 callstack 自己的寄存器环境 registercont 自己的线程本地存储 thread localstorage

    2026年3月26日
    3
  • Kimi K2宣布更新:上下文长度扩展至256K,带来更快的API

    Kimi K2宣布更新:上下文长度扩展至256K,带来更快的API

    2026年3月12日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号