线程审查生产者和消费者

线程审查生产者和消费者

大家好,又见面了,我是全栈君,今天给大家准备了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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 1.什么是线程池?为什么要使用线程池

    1.什么是线程池?为什么要使用线程池线程池作为java开发者必备技能,在日常开发中十分常见,所以从这一节开始我们介绍线程池。今天的内容有两点,第一点,为什么要使用线程池?第二点,什么是线程池?首先来看第一点,为什么要使用线程池?在

    2022年7月3日
    29
  • pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别

    pycharm创建python虚拟环境好处_pycharm虚拟环境与本地环境区别提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、虚拟环境的作用二、虚拟环境的创建、查看以及删除1.虚拟环境的创建2.虚拟环境的查看3.虚拟环境的激活4.虚拟环境的删除总结前言网上的大多数教程都是通过使用第三方模块来创建和删除虚拟环境,对新手很不友好,在这里分享一下我使用Pycharm创建虚拟环境的过程。一、虚拟环境的作用每个虚拟环境中安装的第三方模块不会与其它环境中同名的第三方模块发生版本冲突,每个虚拟环境之间互不影响。通过为每个项目创建单独的虚拟环境

    2025年7月23日
    0
  • java lang illegalargument_java true false

    java lang illegalargument_java true false我们的JSP项目在上传文件时通常都需要获取目录在服务器上的绝对路径,request.getRealPath()方法显示已经过时,但是还是有替代方法的。HttpSessionsession=request.getSession(true);//获取session//Stringpath=request.getRealPath(“/data/userfile/p_w_picpath”)…

    2022年9月18日
    0
  • 深入理解java注解的实现原理(转载)

    深入理解java注解的实现原理(转载)转自 深入理解 java 注解的实现原理今天将从以下 4 个方面来系统的学习一下 java 注解 什么是注解 注解的用途 注解使用演示 注解的实现原理 1 什么是注解注解也叫元数据 例如我们常见的 Override 和 Deprecated 注解是 JDK1 5 版本开始引入的一个特性 用于对代码进行说明 可以对包 类 接口 字段 方法参数 局部变量等进行注解一般

    2025年6月18日
    0
  • 突然想去旅游[通俗易懂]

    突然想去旅游[通俗易懂]  突然想去旅游,一个人,静静的,去到那些宁静的自然风光中去,置身其中,什么也不想! 

    2022年4月29日
    33
  • 重复字符串 leetcode_字符串中出现最多的子串 leetcode

    重复字符串 leetcode_字符串中出现最多的子串 leetcode原题链接给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,”pwk

    2022年8月8日
    5

发表回复

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

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