日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java多線程模擬交通燈管理系統(tǒng)

瀏覽:13日期:2023-12-05 15:51:08

本文實例為大家分享了java多線程模擬交通燈管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

一、項目業(yè)務邏輯分析

項目需求:模擬實現(xiàn)十字路口的交通燈管理系統(tǒng)邏輯,要求如下:

異步隨機生成按照各個路線行駛的車輛,例如由北向南行駛的車輛、由東向南行駛的車輛。 信號燈忽略黃燈,只考慮紅燈和綠燈的情況。 左轉受信號燈控制,右轉車輛不受信號燈控制,其他情況與現(xiàn)實生活的邏輯相同。 注:南北向車輛和東西向方向車輛交替放行,同方向等待車輛應先放行直行車輛,而后再放行左轉車輛。 每輛車通過路口所需時間為1秒(提示:可以通過線程的sleep方法模擬)。 隨機生成車輛,時間間隔以及紅綠燈交換時間自定。 不要求GUI,只考慮系統(tǒng)邏輯實現(xiàn)。可在在終端log方式模擬。

首先了解一下現(xiàn)實中十字路口的交通燈的業(yè)務邏輯(為此我大晚上在十字路口仔細觀察了半個小時,缺少生活啊。),直接上圖吧,直觀明了:

java多線程模擬交通燈管理系統(tǒng)

額,乍一看有點亂,仔細一想很簡單,就是東西南北四條路每條路都有三個去向,左轉、右轉和直行,這樣一個十字路口就有了12個行駛方向。每個方向都有一個指示燈,也就是12個信號燈,如果每個信號燈都單獨控制,那就麻煩多了,而且很不科學,得一天24小時堵車。需求第3點說明右轉不受信號燈控制,其實現(xiàn)實生活照也是這樣,一般右轉車輛不受控制的(比較繁忙的路口受控制),隨時可以轉,也就是說永遠是綠色等,想不通為什么這樣設計?而 對立面的燈是同步變化的,同時綠或者同時紅,這樣只需要系統(tǒng)控制一個方向的燈就可以了。最后我們只需要控制四個方向的燈就行了,這里選擇了圖中標記的①②④③四條路線,只要在改變其中一條路線的信號燈時同步改變對立面的燈為相同信號就行了。另外還要同時把下一個信號燈切換成相反的信號,例如S2W變紅時,同時N2E也要變紅,并且E2W或W2E變綠。這里我們選擇逆時針方向輪循。

二、系統(tǒng)詳細設計

根據(jù)業(yè)務需求分析,需要對象:信號燈、信號燈控制系統(tǒng)、汽車和路線。下面具體分析每個對象所以屬性和方法。信號燈類(Lamp):信號燈只有紅和綠兩種狀態(tài),用boolean變量表示,true表示綠燈,false表示紅燈。還要提供切換信號燈狀態(tài)的方法turnRed和turnGreen。信號燈控制系統(tǒng)(LampController):控制系統(tǒng)主要負責在規(guī)定時間切換紅綠燈,并隨著此類的創(chuàng)建,整個系統(tǒng)就開始運作,所以把系統(tǒng)啟動的實現(xiàn)放在了構造方法內(nèi)。汽車(Vihicles):這里只需要體現(xiàn)汽車穿過路口的過程不需要體現(xiàn)移動細節(jié),也就是捕捉路上減少一輛車的過程,所以,這個車并不需要單獨設計成為一個對象,用一個字符串表示就可以了。并且車是屬于公路的,應該是一種聚合關系,根據(jù)擁有數(shù)據(jù)者應提供訪問數(shù)據(jù)的方法的規(guī)律,這里路要提供增減車輛的方法。路線(Road):每輛汽車不是看到對面的信號燈變綠就可以穿過的,要按照路線上的車隊順序依次通過路口,這個深有體會,堵車有時兩次綠燈都過不去路口。

根據(jù)以上分析類圖設計如下:

java多線程模擬交通燈管理系統(tǒng)

類圖很簡單,可以看出這三個類之間只是簡單的關聯(lián), Road中要用到Lamp的信號燈狀態(tài)判斷是否放行車輛,LampController負責定時切換Lamp的信號燈狀態(tài)。具體實現(xiàn)時為了方便有些方法的功能是放在構造方法里實現(xiàn)的。

三、具體實現(xiàn)

Lamp類:

public enum Lamp { /** * E2W=East to West, N2S=North to South * 從南面的交通燈開始,逆時針執(zhí)行 */ //初始狀態(tài)為紅燈 S2N('N2S','S2W',false),S2W('N2E','E2W',false), E2W('W2E','E2S',false),E2S('W2N','S2N',false), //對立面紅燈 N2E(null,null,false),N2S(null,null,false), W2E(null,null,false),W2N(null,null,false), //四個右轉方向,始終時綠燈 S2E(null,null,true),E2N(null,null,true), N2W(null,null,true),W2S(null,null,true); //燈的狀態(tài) true=green,false=red private boolean lighted; private String opposite=null; private String next=null; private Lamp() {} /** * @param opposite 對面的燈 * @param nexe 下一個燈 * @param initLighted 燈的初始狀態(tài) */ private Lamp(String opposite,String next,boolean initLighted){ this.opposite=opposite; this.next=next; this.lighted=initLighted; } //判斷燈的狀態(tài) public boolean getLighted(){ return lighted; } //綠燈亮 同時把對面的燈設為綠 下一個燈設為紅燈 public void turnGreen(){ this.lighted=true; //如果對面有燈 if(opposite!=null){ Lamp.valueOf(opposite).turnGreen(); } } //紅燈亮 對立面的燈也變紅 public Lamp turnRed(){ this.lighted=false; Lamp nextGreenLamp=null; //對面的燈 同步變化 if(opposite!=null){ Lamp.valueOf(opposite).turnRed(); } //下一個燈 綠燈亮 if(next!=null){ nextGreenLamp=Lamp.valueOf(next); nextGreenLamp.turnRed(); } return nextGreenLamp; }}

Road類:

public class Road { //存放每條路上的車輛 車名就表示一輛車 private List<String> vehicles=new ArrayList<String>(); private String roadName=null; public Road(String roadName) { super(); //根據(jù)路的方向取名,名字和對面的紅綠燈同名 E2W表示東向西的路 this.roadName = roadName; //用線程池啟動一個線程,隨機產(chǎn)生一輛車 Executors.newSingleThreadExecutor().execute(new Runnable(){ @Override public void run() { for(int i=1;i<1000;i++){ try { //每隔1~10秒 隨機產(chǎn)生一輛車 Thread.sleep((new Random().nextInt(10)+1)*1000); } catch (InterruptedException e) { e.printStackTrace(); } //訪問外部類的成員變量 vehicles.add(Road.this.roadName+'路 第 '+i+' 輛車'); } } }); /* * 定義一個計時器 使這條路每隔1s 就檢查一次這條路對應的交通燈的狀態(tài) * 如果是綠燈 就每隔1s使離一輛車 */ ScheduledExecutorService timer=Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate(new Runnable(){ @Override public void run() { //先判斷這條路上是否有車 if(vehicles.size()>0){ //在判斷交通燈狀態(tài)boolean lighted=Lamp.valueOf(Road.this.roadName).getLighted(); if(lighted){ //從汽車列表中移除 并提示已通過路口 System.out.println(vehicles.remove(0)+'通過路口。。。'); } } } }, 1, 1, TimeUnit.SECONDS); }}

LampController類:

//燈控系統(tǒng)public class LampController { private Lamp currentLamp; public LampController() { super(); //交通燈系統(tǒng)初始化 第一個運行的S2N turn green this.currentLamp = Lamp.S2N; this.currentLamp.turnGreen(); //定時器 每個10s 切換一次信號燈狀態(tài) ScheduledExecutorService timer=Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate(new Runnable(){ @Override public void run() { currentLamp=currentLamp.turnRed(); } }, 10, 10, TimeUnit.SECONDS); }}

運行結果:

java多線程模擬交通燈管理系統(tǒng)

四、總結

本題目整體結構很簡單,不涉及復雜的設計模式,重點是對業(yè)務邏輯的分析,首先要搞明白交通信號燈的運行機制,如果不考慮右轉的情況,簡答理解就是東西方向和南北方向的車輛交替放行,同方向等待紅燈的車輛先放行直行車輛一段時間,然后再放行左轉的車輛。在具體實現(xiàn)上有兩個難點:其一就是利用線程設置定時器,實時監(jiān)控每條路上的信號燈狀態(tài)和模擬隨機在各個方向的路上產(chǎn)生一些車輛,控制系統(tǒng)的任務比較簡單只需要定時輪流切換信號燈狀態(tài)。其二是巧妙的把四個方向的信號燈設計成了一個環(huán)形鏈表,控制系統(tǒng)只需要控制一個信號燈,其他3個就有規(guī)律的聯(lián)動運行了。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产不卡一区| 亚州欧美在线| 久久不见久久见中文字幕免费| 日韩精品国产精品| 亚洲2区在线| 国产另类在线| 久久av网站| 国产精品久久久久蜜臀| 国产在线观看www| 麻豆一区在线| 丁香婷婷久久| 久久久夜夜夜| 欧美日韩精品免费观看视频完整| 亚洲二区免费| 在线精品国产亚洲| 欧美一级全黄| 岛国精品一区| 欧美日韩水蜜桃| 中文亚洲欧美| 欧美日韩在线精品一区二区三区激情综合 | 国产免费av国片精品草莓男男 | 在线亚洲人成| 激情综合网址| 亚洲香蕉视频| 久久a爱视频| 国产成人精品亚洲日本在线观看| 1024精品一区二区三区| 丝袜美腿亚洲一区二区图片| 91免费精品国偷自产在线在线| 国产精品宾馆| 色婷婷久久久| 亚洲尤物av| 欧美成人精品一级| 美女av在线免费看| 在线视频免费在线观看一区二区| 综合激情网...| 欧美激情91| 亚洲高清毛片| 欧美亚洲tv| 日韩欧美一区二区三区免费看| 亚洲精品99| 69堂精品视频在线播放| 中文字幕色婷婷在线视频| 免费久久99精品国产自在现线| 国产精品永久| 亚洲午夜精品久久久久久app| 日韩欧美中文字幕电影| zzzwww在线看片免费| 老鸭窝毛片一区二区三区| 国产精品视频一区二区三区四蜜臂| 久久激情网站| 久久国产三级精品| 久久精品电影| 国产欧美日韩一级| 亚洲午夜电影| 国产欧美大片| 亚洲激情偷拍| 国产亚洲欧美日韩精品一区二区三区| 在线观看精品| 热久久久久久| 久久中文视频| 欧美aaaaaa午夜精品| 9国产精品视频| 麻豆国产精品一区二区三区| 99国产精品久久久久久久成人热| 老牛国内精品亚洲成av人片| 日韩午夜电影| 成人精品动漫一区二区三区| 亚洲精品一区二区在线播放∴| 97精品在线| 日韩区一区二| 五月婷婷亚洲| а√在线中文在线新版| 日本午夜精品| 亚洲欧美日韩国产| 欧洲av不卡| 国产精品主播| 中文字幕一区二区av| 桃色av一区二区| 国产精品蜜月aⅴ在线| 石原莉奈一区二区三区在线观看 | 亚洲一区二区网站| 精品国产第一福利网站| 国产探花在线精品一区二区| 亚洲一区二区三区四区五区午夜| av资源中文在线天堂| 国产欧美自拍一区| 中文字幕一区二区精品区| 视频福利一区| 国产成年精品| 欧美一区二区三区久久| 伊人久久亚洲热| 日韩毛片在线| 国产精品13p| 久久午夜影院| 国产伦理久久久久久妇女| 免费一级片91| 亚洲免费精品| 欧美日韩在线网站| 日韩欧美精品综合| 国产精品成久久久久| 美女免费视频一区| 国产精品麻豆成人av电影艾秋| 日韩**一区毛片| 亚洲精品伊人| 视频一区二区国产| 欧美日韩国产综合网| 欧美大黑bbbbbbbbb在线| 久久精品91| 伊人久久高清| 日韩毛片在线| 欧美日韩尤物久久| 久久久国产亚洲精品| 色婷婷精品视频| 私拍精品福利视频在线一区| 中文字幕在线高清| 日韩欧美中文| 亚洲91精品| 精品一区免费| 国产美女一区| 亚洲免费网址| 国产精品美女久久久| 一区在线免费观看| 夜久久久久久| 亚洲免费网址| 亚洲精品综合| 日韩精品1区2区3区| 日韩国产在线不卡视频| 国产色噜噜噜91在线精品| 免费在线观看一区| 高清日韩欧美| 午夜欧美巨大性欧美巨大| 日韩精品一卡| 日韩视频久久| 亚洲日本国产| 久久精品99国产精品| 欧美一区久久| 你懂的亚洲视频| а√天堂中文在线资源8| 青青久久av| 亚洲视频播放| 日本一区福利在线| 国产精品久久久久77777丨| 国产精品白浆| 在线手机中文字幕| 亚洲一本视频| 亚洲天堂日韩在线| 国产精品视频一区二区三区综合| 国产一区二区三区四区五区| 日韩三区免费| 美女网站久久| 日韩精品社区| 国产伊人久久| 欧美日韩国产传媒| 亚洲不卡视频| 老司机精品在线| 久久国产亚洲| 中文字幕日本一区二区| 欧美激情麻豆| 国产尤物精品| 欧美日韩视频免费看| 中文在线中文资源| 视频一区免费在线观看| 国产精品综合色区在线观看| 天堂√中文最新版在线| 在线一区免费观看| 911精品国产| 欧美日韩精品免费观看视完整 | 国产欧美在线观看免费| 91视频一区| 日韩精品一二三| 麻豆一区二区三区| 国户精品久久久久久久久久久不卡| 蜜桃av一区二区在线观看| 美女性感视频久久| 亚洲免费黄色| 欧美黄色精品| 91久久久久| 国产精品多人| 136国产福利精品导航网址| 日韩激情综合| 日韩三区在线| 日韩动漫一区| 久久久久久久久丰满| 日本国产一区| 久久婷婷激情| 国产精品九九| 夜夜精品视频| 麻豆精品久久久| 亚洲色诱最新| 精品欠久久久中文字幕加勒比| 午夜电影亚洲| 国产一区二区三区探花| 美女黄网久久| 国产传媒在线观看| 亚洲精品自拍| 久久中文亚洲字幕| 国产精品xxxav免费视频| 国产视频一区在线观看一区免费| 欧美极品一区二区三区|