大家好,又见面了,我是全栈君,今天给大家准备了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); } }}
版权声明:本文博客原创文章,博客,未经同意,不得转载。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117358.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...