问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用Java代码模拟实现:一个人不断往箱子里放苹果,另一个人不断从箱子里取苹果,箱子里只能放5个苹

发布网友 发布时间:2022-04-24 13:36

我来回答

3个回答

热心网友 时间:2023-10-14 16:48

package com.zt.test;

import java.util.Stack;

public class Test7 {

private Stack<String> box;

public String operationBox(boolean flag, String num) {
String str = "";
synchronized (Test7.class) {
if (flag) {
this.box.push(num);
} else {
str = this.box.pop();
}
}
return str;
}

public static void main(String args[]) {
Test7 a = new Test7();
a.initApples();
}

public Test7() {
this.box = new Stack<String>();
}

public void forSleep(int i) {
try {
Thread.sleep(i);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
 * 放苹果的人
 */
public void putApple() {
int no = 1;
while (true) {
this.forSleep(1000);
int check = this.box.size();
System.out.println("---------现在有" + check + "个苹果---------");
if (check >= 5) {
System.out.println("------------箱子里有5个苹果无法放入------------");
continue;
} else {
System.out
.println("------------放入第" + no + "个苹果--------------");
this.operationBox(true, no + "");
no = no + 1;
}
}
}

/**
 * 拿苹果的人
 */
public void getApple() {
while (true) {
this.forSleep(800);
int check = this.box.size();
System.out.println("=========现在有" + check + "个苹果============");
if (check == 0) {
System.out.println("==========箱子里有0个苹果无法去除===========");
continue;
} else {
String str = this.operationBox(false, null);
System.out.println("==========从箱子出取出第" + str + "个苹果==========");
}
}
}

/*
 * 初始化两个人
 */
public void initApples() {
Thread t1 = new Thread(new Runnable() {
public void run() {
try {
putApple();
} catch (Exception e) {

}
}
});
t1.start();
Thread t2 = new Thread(new Runnable() {
public void run() {
try {
getApple();
} catch (Exception e) {

}
}
});
t2.start();
}
}

一个放一个拿,operationBox()锁住stack的操作,forsleep方法是进行休眠的,模拟一块一慢,如果需要无序时间,自己写随机函数进行线程休眠。

热心网友 时间:2023-10-14 16:49

开两个线程,对箱子里的苹果数量加锁,单次只允许一个线程访问(+1或-1)

热心网友 时间:2023-10-14 16:49

这是一个经典的生产者与消费者问题,具体实现请参见附件。

自己把Info类修改为Apple,InfoPool改为ApplePool,Procer改为AppleSetter,Consumer改为AppleGetter,这样比较贴近你的要求。

注意例子中实现了单一生产者与单一消费者、单一生产者与多个消费者、单多个生产者与多个消费者三种代码,如果不需要其他的,请自行删除。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
日本最厉害的神叫什么?形象又是什么样的? 我是1995年的,我是几岁上的小学啊? 95年大学毕业于哪一年几月份 1995年生的孩子几岁上小学,中学,高中 叶罗丽时辰砂兑换码大全 叶罗丽精灵梦礼包哪里领 礼包领取兑换地址大全 叶罗丽彩妆公主怎么玩_叶罗丽彩妆公主玩法大全 叶罗丽小游戏大全(叶罗丽小游戏大全换装游戏) 港式碗仔翅的烹饪秘诀有哪些呢? ...三个月的机械键盘有一些键失灵了 用回以前的键盘普通键盘就可以用... 上边一个草头下边一个频怎么读 家里有两个苹果手机,也有WIFI,为什么只能有一个手机可以上呢?另一个就不能上网 如果我的手机正在打王者荣耀,用另一个手机登录同一个帐号的王者荣耀助手我这边会掉线吗? 苹果手机自带内存满了,如和利用另外一个内存 我有两个苹果手机用的同一个I&#39;d.其中一个手机打开查找邀请了一个朋友定位我 那我另一个手机能看到吗? 平加什么部首变成另一个字 平可以加什么偏旁变成另一个字? 怎么把萍苹果手机上的电话号码转到另一个苹果手机 怎么把萍苹果手机上的电话号码转到另一个苹果手机? 苹果手机5s插移动卡为什么给联通卡打电话总是通话中?然后拿另一个苹 把两个苹果放在两个碗里一只苹果放清水另一只苹果放盐水为什么放在盐水里的苹? 美团借钱能否直接放放在美团嘛 中小企业crm系统 鹏为CRM怎么样啊? qq邮箱解绑后要多久才可以绑定新帐号 请问最好 最简单 最便宜的管理CRM系统软件有哪些? QQ号码申述后过多久才回复信息给邮箱? 成人礼的仪式都有哪些程序啊 深圳市建设银行分行的CRM系统!!! 用qq号注册,使用qq邮箱为什么不行 CRM是什么?在中国的发展情况如何? vivoY50手机拍照为什么有两张照片,删除1个另一个也被删除? 怎样将我的流量与其他人共享? や﹎笙歌浅浅ヽ 情侣网名另一个是什么!女生用的! 怎样流量共享给别人用 苹果手机相互打电话另一个也能收到 我国频临灭绝的生物 一个人分走一半苹果少一个,另一个人分走剩下的一半,还剩四个,一共有多少个苹? 有科幻迷没有?刘慈新的《赡养人类》结局什么意思?没看懂、十三个人怎么许雪萍活了下来? 注册环评工程师 签书、签表分别市场行情是多少? 《环评注册工程师证书》这个证书具体内容?有什么好处呢? 注册环评师的日常工作是什么? 注册环评工程师 报考条件? 装潢美术设计 可以报考吗? 2019注册环评工程师全职上班目前年薪一般是多少? 环境影响评价工程师的含金量高吗?想参加这个考试。 手机截屏的图片突然不见了,是怎么回事? 电脑上无线网卡的网络可以连到手机上用吗? 无线网卡插电脑上手机能无线上网吗? 我手机截屏,在相册里没有图片怎么回事事啊? 笔记本电脑无线上网卡可以插手机卡用吗 如何使用笔记本电脑的无线网卡来让手机通过WIFI连接上网?