多线程实现龟兔赛跑,java多线程入门实例

今天刚学了多线程,入门程序,龟兔赛跑。

两个线程同时开跑。


跑步者线程

package com.vecheer.domain;


//模拟跑步者的 跑
public class Thread_RaceRun implements Runnable {

    //跑步者的个人信息
    private int distance;  //路程 龟兔都应该一样
    private int speed;  //跑步速度
    private int sleepTime; //设置跑到一半时的睡眠时间

    //胜利者信息
    public static String winner = null; //胜利者只有一个,设置为静态变量。实际上,也正是这个公共静态变量让多个线程(跑步者)实现了通信

    //构造器初始化跑步者信息
    public Thread_RaceRun(int distance, int speed, int sleepTime) {
        this.distance = distance;
        this.speed = speed;
        this.sleepTime = sleepTime;
    }

    //跑
    @Override
    public void run() {
        //开始跑,只要过程中未产生胜利者,则一直跑下去
        for (int i = 0; i < distance; i += speed) {

            //正常跑步
            if (winner == null)
                System.out.println(Thread.currentThread().getName() + "---->已经跑了" + i + "米");
            else {
                System.out.println(Thread.currentThread().getName() + "---->***不再跑步,获胜者已经是" + winner + "***");
                return;
            }

            //跑一半时睡觉
            if (i + speed == distance/2 ) {
                try {
                    System.out.println( Thread.currentThread().getName() + "---->开始睡觉,将睡" + sleepTime/1000 + "秒");
                    Thread.sleep(sleepTime);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        //跑完了都没有产生胜利者,则本线程就是胜利者
        winner = Thread.currentThread().getName();
        System.out.println(Thread.currentThread().getName() + "---->***跑步结束,获得胜利!***");
    }


}

跑道 (主线程、测试类)

package com.vecheer.example;

import com.vecheer.domain.Thread_RaceRun;

//模拟龟兔赛跑的跑道
public class Example3_Race {

    public static void main(String[] args) {

        //建立乌龟兔子跑步线程
        Thread_RaceRun trr1 = new Thread_RaceRun(200,20,3*1000); //兔子跑步模型 跑200米 速度20米每秒 睡3秒(因为cpu执行速度太快)
        Thread_RaceRun trr2 = new Thread_RaceRun(200,1,0); //乌龟跑步模型 跑200米 速度1米每秒 睡0秒,不睡
        Thread rabbit = new Thread(trr1,"兔子");
        Thread tortoise = new Thread(trr2,"乌龟");

        //开跑!
        rabbit.start();
        tortoise.start();
    }

}

 

你可能感兴趣的:(多线程实现龟兔赛跑,java多线程入门实例)