线程审查生产者和消费者

线程审查生产者和消费者

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


相关推荐

  • win10怎么完全卸载sql2012_软件卸载了数据还在吗

    win10怎么完全卸载sql2012_软件卸载了数据还在吗怎样才能将SQL Server2012彻底的卸载干净?因为安装目录加上实例目录加上就有10G,由于一些实例目录默认在系统C盘,占据了很大的一部分,又担心怕删除了重要的文件,又担心卸载删除不干净,会导致下一次的安装不成功。以下是彻底删除SQLServer的步骤:第一步,在控制面板里面找到程序——卸载程序这一项,打开之后就会是这样的了 第二步,经过第一步打开卸载程序后,在里面找到Microso…

    2022年10月2日
    4
  • LINUX centos 安装图形界面

    LINUX centos 安装图形界面以Centos6.5为例演示一下如何安装桌面环境。一、首先查看系统的运行级别以及是否安装了桌面环境1、使用命令runlevel查看当前系统运行级别,如图所示2、使用命令yumgrouplist|more查看是否安装了桌面环境的组件,如图所示二、再次从上面分析的结果看到,当前运行级别是3,而且也没有安装桌面环境的软件。然后我们使用命令查看一下桌…

    2022年5月10日
    44
  • 跨数据库同步方案汇总怎么做_国内外数据库同步方案

    跨数据库同步方案汇总怎么做_国内外数据库同步方案Datax一般比较适合于全量数据同步,对全量数据同步效率很高(任务可以拆分,并发同步,所以效率高),对于增量数据同步支持的不太好(可以依靠时间戳+定时调度来实现,但是不能做到实时,延迟较大)。Canal、databus等由于是通过日志抓取的方式进行同步,所以对增量同步支持的比较好。OGG太贵一、早期关系型数据库之间的数据同步二、大数据时代下的数据同步三、总结一、早期关系型数据库之间的数据同步1)、全量同步比如从oracle数据库中同步一张表的数据到My

    2022年10月10日
    3
  • 免费申请国外免费域名超详细教程

    免费申请国外免费域名超详细教程1.首先申请免费域名网站:https://my.freenom.com/domains.php2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解)4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮5.默认三个月试用,这里下拉框我们选择十二个月

    2022年6月30日
    101
  • MQTT服务器部署

    MQTT服务器部署MQTT服务器部署现在物联网常用的通信方式有哪些?RF433/315M、蓝牙、Zigbee、wifi、以太网等等,通信协议也按不同功能分了许多种,例如TCP、MQTT等,具体可到https://blog.csdn.net/sinat_36098122/article/details/80930168研究。我当前用的比较多的是MQTT协议,它被较多的用来需要省电的设备通信上,采用发布/订阅的形式…

    2022年5月8日
    81
  • 在Idea里面修改背景颜色

    在Idea里面修改背景颜色在 Idea 里面修改背景颜色 1 点击左上角 File 然后找到 Settings2 搜索框搜索 Font 然后后找到 Appearance 设置右面的 Theme 即可改变为想要的背景色

    2025年6月30日
    4

发表回复

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

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