public Animal{
//变量
String name; //动物的种类
int distance; //赛跑的总路程
int speed; //每个动物的速度,假设为匀速
int predistance = 0; //当前里程,用于输出
//构造
public Animal(String name,int speed,int distance){
this.name = name;
this.speed = speed;
this.distance = distance;
}
/*
*比赛规则:当前里程=时间(用Math下的random方法随机一个时间)X 速度
*当跑总路程输出“我跑完了”
*/
public void race{
while(predistance<distance){
try{
Thread.sleep((int)(Math.random()*1000+500));
}catch(InterruptedException e){
e.printStackTrace();
}
predistance += Math.random()*speed;
System.out.println(name + ":我跑了:" + predistance + "米");
}
System.out,println("我跑完了");
}
}
将这个类以多线程的方式实现,将类放入继承了Thread类并重写了其run方法的Race类中
public class Race extends Thread{
Animal animal;
public Race(Animal animal){
this.animal = animal;
}
@Override
public void run(){
animal.run();
}
对多线程进行操作,通过start方法运行多线程
public class Test{
public static void main(String[] args){
Animal rabbit = new Animal("兔子",15,50);
Animal turtle = new Animal("乌龟",12,50);
Race thread1 = new Race(rabbit);
Race threas2 = new Race(turtle);
thread1.start();
thread2.start();
}
}
运行结果:
乌龟 : 我跑了:3米
兔子 : 我跑了:0米
乌龟 : 我跑了:13米
兔子 : 我跑了:1米
乌龟 : 我跑了:16米
兔子 : 我跑了:6米
乌龟 : 我跑了:25米
兔子 : 我跑了:14米
乌龟 : 我跑了:33米
兔子 : 我跑了:14米
乌龟 : 我跑了:44米
兔子 : 我跑了:18米
乌龟 : 我跑了:45米
兔子 : 我跑了:22米
兔子 : 我跑了:24米
乌龟 : 我跑了:52米
我跑完了!
兔子 : 我跑了:34米
兔子 : 我跑了:45米
兔子 : 我跑了:54米
我跑完了!