日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

简单模拟医院叫号系统

發布時間:2024/6/21 综合教程 19 生活家
生活随笔 收集整理的這篇文章主要介紹了 简单模拟医院叫号系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前有個習慣就是發現一些生活的系統,總會大概想想自己開發到底怎么實現。有的可能就在腦海里面過一下思路,有的則會寫個簡單的demo驗證一下自己的思路是否可行。

筆者前段時間在醫院等候,仔細觀察了一下叫號系統。于是有了想自己寫一個簡單的叫號系統。

用例大致如下:

每個診室的醫生登錄系統,都可以叫號,不能重復叫號,也不能跳號,順序遞增
每個醫生看病的速度不一樣,線程需要睡眠一個隨機時間模擬醫生看病時間
每個醫生登錄時間不一樣,每次叫號都是基于最新的當前號碼
某個醫生看病的時候,其它醫生正常叫號
某個醫生可以中途下班
所有醫生有下班的需求

程序大致如下:

Worker.java

 1 package demo;
 2 
 3 import java.util.concurrent.locks.Lock;
 4 import java.util.concurrent.locks.ReentrantLock;
 5 
 6 public class Worker implements Runnable {
 7     private static int counter = 0;
 8     private Lock myLock = new ReentrantLock();
 9     private volatile boolean isWorking = true;
10     
11     @Override
12     public void run() {
13         while (isWorking) {    
14             myLock.lock();
15             ++counter;    
16             // 開始叫號,當前號(counter)患者進入某個診室
17             String doctor = Thread.currentThread().getName();
18             int currentNO = counter; // 保留當前醫生的病人號碼
19             System.out.println(doctor + " is calling patient NO --- "+currentNO);
20             myLock.unlock();
21             try {
22                 long checkTime = (long)(10000 * Math.random());
23                 Thread.sleep(checkTime);
24                 System.out.println(doctor + " used " + checkTime + " milliseconds on patient NO --- "+currentNO);
25                 // 醫生看病時間結束,開始叫下一位患者
26                 System.out.println(doctor + " has finished diagnosing patient NO--- "+currentNO);
27                 System.out.println("============================================");
28             } catch (InterruptedException e) {
29                 // TODO Auto-generated catch block
30                 e.printStackTrace();
31             }
32         }
33     }
34     
35     // 所有醫生下班了
36     public void stop() {
37         isWorking = false;
38     }
39 }

主類Yell.java

package demo;

public class Yell {

    public static void main(String[] args) {

//模擬三個醫生Alice, Tom, Bob Worker runner = new Worker(); Thread t1 = new Thread(runner); t1.setName("Alice"); t1.start(); Thread t2 = new Thread(runner); t2.setName("Tom"); t2.start(); Thread t3 = new Thread(runner); t3.setName("Bob"); t3.start(); try { Thread.sleep(20000); // 模擬某個醫生下班中途退出, 這里的退出有待進一步改進 t1.stop(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Thread.sleep(20000); // 所有醫生下班了 runner.stop(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }

歡迎關注微信公眾號:職場聞道

程序員出身的職場老兵,至今工作13年+,擅長團隊建設和管理,心理輔導,分析職場各種疑難雜癥問題。公眾號取自聞道有先后,術業有專攻。專注分享職業發展,職業規劃,職場人情冷暖,百態人生。

總結

以上是生活随笔為你收集整理的简单模拟医院叫号系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。