java关于糖果生产与消费的简单游戏
程序员文章站
2022-03-06 10:35:33
使用糖果的生产与消费小游戏来考察java多线程,安全以及线程通信。工人生产糖果每次生产一个最多可以生产20个;小盆友每次可以吃一个,当糖果为零就需等待工人生产。本题是一个双线程问题,分别是工人和小盆友这两条,其次还要考虑两条线程的通信,当生产到20个时工人线停止并唤醒小盆友那条线;当小盆友吃完时这条线停止唤醒工人线。最后安全问题使用同步方法解决。代码如下:/*糖果类,属性是糖果,方法是生产和消费。生产和消费是两条线程,共用了糖果这个属性,使用同步方法(同步监视器是糖果类)保证安全性使用wait...
使用糖果的生产与消费小游戏来考察java多线程,安全以及线程通信。
工人生产糖果每次生产一个最多可以生产20个;小盆友每次可以吃一个,当糖果为零就需等待工人生产。
本题是一个双线程问题,分别是工人和小盆友这两条,其次还要考虑两条线程的通信,当生产到20个时工人线停止并唤醒小盆友那条线;当小盆友吃完时这条线停止唤醒工人线。最后安全问题使用同步方法解决。
代码如下:
/*
糖果类,属性是糖果,方法是生产和消费。生产和消费是两条线程,
共用了糖果这个属性,使用同步方法(同步监视器是糖果类)保证安全性
使用wait()和notify()保证信息传递。
*/
public class Candy {
private int candy=0;
// 生产方法
public synchronized void productCandy() {
if (candy<20){
candy++;
System.out.println(Thread.currentThread().getName()+"正在生产第"+candy+"个糖果");
notify(); //生产了之后就可以唤醒消费方法
}else {
try {
wait(); //达到20个使其睡眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//消费方法
public synchronized void consumeCandy() {
if (candy>0){
System.out.println(Thread.currentThread().getName()+"正在吃第"+candy+"个糖果");
candy--;
notify(); //消费一个就可以唤醒生产方法
}else{
try {
wait(); //消费光了就使其睡眠
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
//生产类,无限生产即可
public class Producer extends Thread{
private Candy candys;
public Producer(Candy candys) {
this.candys = candys;
}
@Override
public void run() {
System.out.println("开始生产糖果");
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
candys.productCandy();
}
}
}
//消费类,无限消费即可
public class Customers extends Thread{
private Candy candys;
public Customers(Candy candys) {
this.candys = candys;
}
@Override
public void run() {
System.out.println("开始吃糖果");
while (true){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
candys.consumeCandy();
}
}
}
//控制台
public class Console {
public static void main(String[] args) {
Candy candys = new Candy();
//生产和消费都要针对同一个糖果对象
Producer producer = new Producer(candys);
Customers customer = new Customers(candys);
producer.setName("工人");
customer.setName("小盆友");
producer.start();
customer.start();
}
}
本文地址:https://blog.csdn.net/qq_44878531/article/details/107346818
上一篇: cocos creator微信小游戏 加载进度页面
下一篇: 自如网杭州市租房数据分析(2)