爸爸往盘子里放苹果,妈妈往盘子里放桔子,每次只能放一样水果。爸爸放苹果后,叫儿子拿走吃,妈妈放桔子后,叫女儿拿走吃。水果被拿走后,爸爸妈妈又可以往盘子里放水果。利用多线程通信技术编程实现。
1条回答 默认 最新
- 兰林汉的驴粉丝儿 2021-08-16 11:35关注
import java.util.List; //爸爸线程 public class Father implements Runnable { List<String> list; public Father(List<String> list) { this.list = list; } @Override public void run() { while(true){ synchronized (list){ if (list.contains("苹果")){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println("我正在放苹果,题主快来吃!!"); list.add("苹果"); list.notify(); } } } } } import java.util.List; /* 妈妈线程 */ public class Mather implements Runnable{ List<String> list; public Mather(List<String> list) { this.list = list; } @Override public void run() { while(true){ synchronized (list){ if (list.contains("桔子")){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println("妈妈正在放桔子,女儿来拿!!"); list.add("桔子"); list.notify(); } } } } } import java.util.List; /* 儿子线程 */ public class Son implements Runnable{ List<String> list; public Son(List<String> list) { this.list = list; } @Override public void run() { while(true){ synchronized (list){ if (!list.contains("苹果")){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println("题主吃完了苹果,答主快来放!!"); list.remove("苹果"); list.notify(); } } } } } import java.util.List; /* 女儿线程 */ public class Daughter implements Runnable{ List<String> list; public Daughter(List<String> list) { this.list = list; } @Override public void run() { while(true){ synchronized (list){ if (!list.contains("桔子")){ try { list.wait(); } catch (InterruptedException e) { e.printStackTrace(); } }else{ System.out.println("女儿吃完了桔子,妈妈快来放!!"); list.remove("桔子"); list.notify(); } } } } } import java.util.ArrayList; import java.util.List; /* 测试类 */ public class Test { public static void main(String[] args) { List<String> list = new ArrayList<>(); Thread th1 = new Thread(new Father(list)); th1.start(); Thread th2 = new Thread(new Mather(list)); th2.start(); Thread th3 = new Thread(new Son(list)); th3.start(); Thread th4 = new Thread(new Daughter(list)); th4.start(); } }
运行效果
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
- ¥15 不小心不正规的开发公司导致不给我们y码,
- ¥15 我的代码无法在vc++中运行呀,错误很多
- ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
- ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
- ¥30 ppOCRLabel导出识别结果失败
- ¥15 Centos7 / PETGEM
- ¥15 csmar数据进行spss描述性统计分析
- ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
- ¥15 delphi webbrowser组件网页下拉菜单自动选择问题