什么是多线程?在回答这个问题之前先要明白什么是线程,线程是能独立运行的基本单位,要完成程序的运行,最先执行的就是线程,装线程的“容器”叫做进程,如原子构成分子,分子构成元素,程序就是元素,进程相当于分子,而线程就相当于原子。随着计算机的发展,程序需要的运行速度需要越来越快,这时单条线程的完成速度远远跟不上人们的需求,所以多线程应运而生,多线程就是多个线程同时执行完成一个进程,这样大大加快了程序的运行速度,Java的多线程是通过继承接Thread类或者实现Runnable接口来实现。回到文章题目—龟兔赛跑问题。下面是Animal类(只有和赛跑的相关的变量及方法),这个类定义了动物的名字,所跑的路程及实时的里程。
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米
我跑完了!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐