我有一个类,它代表赛车和它的内部,我有一个方法女巫打印到控制台,每当一辆车通过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框架计时器的任务来执行您的时间 - 敏感的计算。 –