为了账号安全,请及时绑定邮箱和手机立即绑定

java多线程相关知识

奇奇和乖乖是小萌养的两只宠物狗,它们共用一个小碗。小萌每往碗里投放5粒狗粮,就停下休息3秒;奇奇和乖乖每吃一粒就停1秒。请编程模拟小萌给两只宠物喂食。这个题怎么破啊?有大神吗,急需破解,万分感谢,只知道跟多线程有关



正在回答

1 回答

package 试试;

import java.util.concurrent.Semaphore;


public class GuaiAndQi {

Semaphore bowl = new Semaphore(1);//用来获得小碗的控制权(主人和两只小狗不能同时放食物或者吃)

int count = 0;//为碗里的狗粮计数

class guaiGuai implements Runnable {//乖乖的线程

public void run() {

while(true){

try {

if(count>0) {

bowl.acquire();//获得碗的控制权

count--;//吃一个狗粮

System.out.println(" 乖乖吃了一个狗粮,当前剩余狗粮为:"+count);

bowl.release();//释放碗的控制权

Thread.sleep(1000);//消食一秒钟(单位是ms)

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

class qiQi implements Runnable {//奇奇的线程

public void run() {

while(true){

try {

if(count>0) {

bowl.acquire();//获得碗的控制权

count--;//吃一个狗粮

System.out.println("奇奇吃了一个狗粮,当前剩余狗粮为:"+count);

bowl.release();//释放碗的控制权

Thread.sleep(2000);//消食两秒钟

}

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

class master implements Runnable {//主人的线程

public void run() {

while(true){

try {

bowl.acquire();//获得碗的控制权

count=count+5;//向碗里放五个狗粮

System.out.println(" 主人放了五个狗粮,当前剩余狗粮为:"+count);

bowl.release();//释放碗的控制权

Thread.sleep(3000);//等待三秒钟

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

public static void main(String[] args) {

GuaiAndQi gaq=new GuaiAndQi();

new Thread(gaq.new master()).start();

new Thread(gaq.new qiQi()).start();

new Thread(gaq.new guaiGuai()).start();

}

}//两只狗吃完消食的时间我设置的不一样,这个你可以自己设置一下。我也是一个学生小白,来试试,共同进步。望采纳。


0 回复 有任何疑惑可以回复我~
#1

qq_慕妹4249041 提问者

万分感谢!
2019-07-06 回复 有任何疑惑可以回复我~
#2

大学老师死的早 回复 qq_慕妹4249041 提问者

可以尽我所能帮到你我也很高兴。
2019-07-06 回复 有任何疑惑可以回复我~
#3

4A46 回复 大学老师死的早

好厉害
2019-07-12 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第一季(IDEA工具)升级版
  • 参与学习       1165816    人
  • 解答问题       17588    个

0基础萌新入门第一课,从Java环境搭建、工具使用、基础语法开始

进入课程

java多线程相关知识

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信