大家好,又见面了,我是全栈君。
采纳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.cn/117358.html原文链接:https://javaforall.cn