多執行緒模擬交通燈管理系統

2021-06-22 21:44:20 字數 2722 閱讀 7132

一、專案業務邏輯分析

專案需求:模擬實現十字路口的交通燈管理系統邏輯,要求如下:

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

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

根據業務需求分析,需要物件:訊號燈、訊號燈控制系統、汽車和路線。下面具體分析每個物件所以屬性和方法。

訊號燈類(lamp):訊號燈只有紅和綠兩種狀態,用boolean變數表示,true表示綠燈,false表示紅燈。還要提供切換訊號燈狀態的方法turnred和turngreen。

訊號燈控制系統(lampcontroller):控制系統主要負責在規定時間切換紅綠燈,並隨著此類的建立,整個系統就開始運作,所以把系統啟動的實現放在了構造方法內。

汽車(vihicles):這裡只需要體現汽車穿過路口的過程不需要體現移動細節,也就是捕捉路上減少一輛車的過程,所以,這個車並不需要單獨設計成為乙個物件,用乙個字串表示就可以了。並且車是屬於公路的,應該是一種聚合關係,根據擁有資料者應提供訪問資料的方法的規律,這裡路要提供增減車輛的方法。

路線(road):每輛汽車不是看到對面的訊號燈變綠就可以穿過的,要按照路線上的車隊順序依次通過路口,這個深有體會,堵車有時兩次綠燈都過不去路口。

根據以上分析類圖設計如下:

類圖很簡單,可以看出這三個類之間只是簡單的關聯,road中要用到lamp的訊號燈狀態判斷是否放行車輛,lampcontroller負責定時切換lamp的訊號燈狀態。具體實現時為了方便有些方法的功能是放在構造方法裡實現的。

三、具體實現

lamp類:

public enum lamp 

/*** @param opposite 對面的燈

* @param nexe 下乙個燈

* @param initlighted 燈的初始狀態

*/private lamp(string opposite,string next,boolean initlighted)

//判斷燈的狀態

public boolean getlighted()

//綠燈亮 同時把對面的燈設為綠 下乙個燈設為紅燈

public void turngreen()

} //紅燈亮 對立面的燈也變紅

public lamp turnred()

//下乙個燈 綠燈亮

if(next!=null)

return nextgreenlamp;

}}

road類:

public class road  catch (interruptedexception e) 

//訪問外部類的成員變數

vehicles.add(road.this.roadname+"路 第 "+i+" 輛車");}}

});/*

* 定義乙個計時器 使這條路每隔1s 就檢查一次這條路對應的交通燈的狀態

* 如果是綠燈 就每隔1s使離一輛車

*/scheduledexecutorservice timer=executors.newscheduledthreadpool(1);

timer.scheduleatfixedrate(new runnable()}}

}, 1, 1, timeunit.seconds);

}}

lampcontroller類:

//燈控系統

public class lampcontroller

}, 10, 10, timeunit.seconds);}}

執行結果:

四、總結

本題目整體結構很簡單,不涉及複雜的設計模式,重點是對業務邏輯的分析,首先要搞明白交通訊號燈的執行機制,如果不考慮右轉的情況,簡答理解就是東西方向和南北方向的車輛交替放行,同方向等待紅燈的車輛先放行直行車輛一段時間,然後再放行左轉的車輛。在具體實現上有兩個難點:其一就是利用執行緒設定定時器,實時監控每條路上的訊號燈狀態和模擬隨機在各個方向的路上產生一些車輛,控制系統的任務比較簡單只需要定時輪流切換訊號燈狀態。其二是巧妙的把四個方向的訊號燈設計成了乙個環形鍊錶,控制系統只需要控制乙個訊號燈,其他3個就有規律的聯動執行了。

交通燈管理系統

銀行業務排程系統模擬銀行排程系統邏輯。需求 銀行內有6個業務視窗,1 4為普通視窗,5為快速視窗,6為vip視窗。有三種型別客戶 vip客戶,快速客戶 交水電費類業務 普通客戶。一部隨機生成各種型別的客戶,概率比例為 vip客戶 快速客戶 普通客戶 1 3 6。客戶辦理用時設定最少時間。各型別客戶在...

交通燈管理系統

需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下 1.非同步隨機生成按照各個路線行駛的車輛。例如 由南向而來去往北向的車輛 直行車輛 由西向而來去往南向的車輛 右轉車輛 由東向而來去往南向的車輛 左轉車輛 2.訊號燈忽略黃燈,只考慮紅燈和綠燈。3.應考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈...

交通燈管理系統

1 非同步隨機生成按照各個路線行駛的車輛。例如 由南向而來去往北向的車輛 直行車輛 由西向而來去往南向的車輛 右轉車輛 由東向而來去往南向的車輛 左轉車輛 2 訊號燈忽略黃燈,只考慮綠燈和紅燈。3 應考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈控制 4 具體訊號燈控制邏輯與現實生活中普通交通燈控制邏輯...