Java 多线程—龟兔赛跑问题
什么是多线程?在回答这个问题之前先要明白什么是线程,线程是能独立运行的基本单位,要完成程序的运行,最先执行的就是线程,线程的“容器”叫做进程,如原子构成分子,分子构成元素,程序就是元素,进程相当于分子,而线程就相当于原子。随着计算机的发展,程序需要的运行速度需要越来越快,这是单条线程完成进程然后再完成程序的执行远远跟不上人们的需求,所以多线程应运而生。
·
什么是多线程?在回答这个问题之前先要明白什么是线程,线程是能独立运行的基本单位,要完成程序的运行,最先执行的就是线程,装线程的“容器”叫做进程,如原子构成分子,分子构成元素,程序就是元素,进程相当于分子,而线程就相当于原子。随着计算机的发展,程序需要的运行速度需要越来越快,这时单条线程的完成速度远远跟不上人们的需求,所以多线程应运而生,多线程就是多个线程同时执行完成一个进程,这样大大加快了程序的运行速度,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米
我跑完了!
更多推荐
已为社区贡献1条内容
所有评论(0)