当前位置: 首页 > news >正文

广州市城乡和建设局网站网络推广员一个月多少钱

广州市城乡和建设局网站,网络推广员一个月多少钱,门户网站建设情况报告,wordpress 插件本地化【案例8-5】 小朋友就餐问题 【案例介绍】 1.任务描述 一圆桌前坐着5位小朋友,两个人中间有一只筷子,桌子中央有面条。小朋友边吃边玩,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。但是,小朋友在吃…

【案例8-5】  小朋友就餐问题

【案例介绍】

  1.任务描述

一圆桌前坐着5位小朋友,两个人中间有一只筷子,桌子中央有面条。小朋友边吃边玩,当饿了的时候拿起左右两只筷子吃饭,必须拿到两只筷子才能吃饭。但是,小朋友在吃饭过程中,可能会发生5个小朋友都拿起自己右手边的筷子,这样每个小朋友都因缺少左手边的筷子而没有办法吃饭。本案例要求编写一个程序解决小朋友就餐问题,使每个小朋友都能成功就餐。

2.运行结果

运行结果如图8-1所示。

图8-1 运行结果

 

【案例思路】

  1. 查看运行结果分析后,每个小朋友相当于一个线程,所以先创建一个Philosopher()方法作为小朋友。
  2. 查看运行结果分析后,创建eating()方法作为小朋友吃饭时的线程,创建thinking()方法作为小朋友玩耍时的线程。
  3. 查看运行结果分析后,需要在获取筷子的方法Fork中先定义一个boolean类型的数组,代表5根筷子的使用情况;再使用synchronized线程锁来控制只有左右手的筷子都未被使用时,才允许获取筷子,且必须同时获取左右手筷子。
  4. 查看运行结果分析后,需要在释放左右手筷子的方法putFork中使用synchronized线程锁来释放筷子。
  5. 最后在Test测试类中调用5次以上方法,代表5位小朋友。

【案例代码】

小朋友就餐问题的程序代码实现如文件8-1所示。

文件8-1  Philosopher.java

  1. package chapter0805;
  2. /*每个小朋友相当于一个线程*/
  3. public class Philosopher extends Thread{
  4.     private String name;
  5.     private Fork fork;
  6.     public Philosopher(String name,Fork fork){
  7.         super(name);
  8.         this.name=name;
  9.         this.fork=fork;
  10.     }
  11.     public void run(){
  12.         while(true){
  13.             thinking();
  14.             fork.takeFork();
  15.             eating();
  16.             fork.putFork();
  17.         }
  18.     }
  19.     public void eating(){
  20.         System.out.println("小朋友"+name+"在吃饭");
  21.         try {
  22.             sleep(1000);//模拟吃饭,占用一段时间资源
  23.         } catch (InterruptedException e) {
  24.             // TODO Auto-generated catch block
  25.             e.printStackTrace();
  26.         }
  27.     }
  28.     public void thinking(){
  29.         System.out.println("小朋友"+name+"在玩游戏");
  30.         try {
  31.             sleep(1000);//模拟思考
  32.         } catch (InterruptedException e) {
  33.             // TODO Auto-generated catch block
  34.             e.printStackTrace();
  35.         }
  36.     }
  37. }
  38. class Fork{
  39.     /*5只筷子,初始为都未被用*/
  40.     private boolean[] used={false,false,false,false,false};
  41.     /*只有当左右手的筷子都未被使用时,才允许获取筷子,且必须同时获取左右手筷子*/
  42.     public synchronized void takeFork(){
  43.         String name = Thread.currentThread().getName();
  44.         int i = Integer.parseInt(name);
  45.         while(used[i]||used[(i+1)%5]){
  46.             try {
  47.                 wait();//如果左右手有一只正被使用,等待
  48.             } catch (InterruptedException e) {
  49.                 // TODO Auto-generated catch block
  50.                 e.printStackTrace();
  51.             }
  52.         }
  53.         used[i ]= true;
  54.         used[(i+1)%5]=true;
  55.     }
  56.     /*必须同时释放左右手的筷子*/
  57.     public synchronized void putFork(){
  58.         String name = Thread.currentThread().getName();
  59.         int i = Integer.parseInt(name);
  60.         used[i]= false;
  61.         used[(i+1)%5]=false;
  62.         notifyAll();//唤醒其他线程
  63.     }
  64. }

文件8-1中第3~18行代码封装一个小朋友的方法,第19~27行代码是封装了小朋友吃饭时的方法,第28~37行代码封装了小朋友玩耍时的方法,第38~64行代码封装了筷子使用情况的方法。

测试类的代码如文件8-2所示,调用5次Fork代表5个小朋友。

文件8-2 Test.java

  1. package chapter0805;
  2. public class Test {
  3.       public static void main(String []args){
  4.             Fork fork = new Fork();
  5.             new Philosopher("0",fork).start();
  6.             new Philosopher("1",fork).start();
  7.             new Philosopher("2",fork).start();
  8.             new Philosopher("3",fork).start();
  9.             new Philosopher("4",fork).start();
  10.         }
  11. }

  

 

http://www.ds6.com.cn/news/14781.html

相关文章:

  • 建网站公司百度推广退款电话
  • 设计做的网站哪些好中文域名交易平台
  • 怎样做一个网络营销seo教程
  • 直播间网站开发目前推广软件
  • 手机app ui设计seo 关键词优化
  • 做视频网站的条件soso搜搜
  • 南通网站建设找哪家好推广策略都有哪些
  • 做外包哪个网站好一些百度快照官网登录
  • 西安网站制作培训成都网站快速开发
  • dede网站下载网络营销应用方式
  • 如何做网站维护谷歌seo排名技巧
  • 常见的旅游网络营销方式衡阳百度seo
  • 正规手表回收网站2345网址导航官网下载
  • 做网站优化的公司的宣传海报百度网页版登录入口
  • 为解析的域名做网站网站查找工具
  • 建设网站租用空间网站优化排名软件哪些最好
  • 网站开发用php还是.net好苏州seo按天扣费
  • 佛山市个性网站建设设计公司千锋教育的it培训怎么样
  • 广东揭阳疫情最新消息seo排名优化软件有
  • 做网站的公司有前途吗简述常用的网络营销方法
  • 徐州网站制作建设谷歌搜索引擎首页
  • 想要一个免费的网站新闻头条
  • 河北邢台专业做网站社群营销案例
  • 宁波seo网站推广怎样免费给自己的公司做网站
  • 邵阳网站建设推广网站域名怎么查询
  • 衡水网站建设怎么做太原做网站的
  • 网站建设英语西安seo外包行者seo06
  • 合肥做装修哪个网站好长沙seo培训
  • 国人在线做网站什么是电商
  • 江苏 网站 备案网络营销公司全网推广公司