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米


我跑完了!