我有一個類,它代表賽車和它的內部,我有一個方法女巫打印到控制檯,每當一輛車通過1000 int檢查點。Java多線程賽車模擬問題
裏面的運行覆蓋我稱這種方法,它suppoused爲我創建的每輛車運行不同,但我想我有什麼問題,因爲結果每次都會改變(它需要保持不變,因爲有些汽車更快,所以我不認爲汽車在不同的線程中移動)。
public class RacingCar extends Thread{
private String model;
private int speed;
public RacingCar(){}
public RacingCar(String model, int speed){
this.start();
this.model = model;
this.speed = speed;
}
public void go(){
int trackLength=5000;
int checkPointPassed=0;
for(int i=0;i<trackLength;i+=speed){
if(checkPointPassed*1000<i){
checkPointPassed++;
System.out.println(this.model+" has passed the "+checkPointPassed+"th check point");
}
}
}
@Override
public void run() {
go();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}}
測試儀(主):
public class Tester {
public static void main(String[] args) {
new RacingCar("Honda", 6);
new RacingCar("Lamborghini", 100);
new RacingCar("McLaren", 8);
}}
你有什麼樣的順序線程將執行沒有保證。你在做什麼是創建三個線程,讓他們每個循環,直到它打印前達到1000。之後,睡10ms後退出。你可能打算在開始線程之前設置速度,以及在循環內睡覺(但即使如此,你也不會嚴格保證打印線的順序......)。 – folkol
儘管可能與原始問題無關,但是您是否確定該命令:'start(); this.model =模型; this.speed =速度;'?行動後初始化? –
每個模擬對象使用一個線程_seriously_限制了您的模擬的可擴展性,它可能也會使您的模擬更加複雜。如果您試圖實時模擬某些內容(例如,顯示在窗口中),那麼您最好使用提交給'ScheduledThreadPoolExecutor'或某種GUI框架計時器的任務來執行您的時間 - 敏感的計算。 –