实现多线程2--实现Runnable接口,重写run()方法

多线程笔记 实现多线程的第二种方法: 实现Runnable接口,重写run()方法

package com.qinayu;

public class TestRunnable implements Runnable{
          
   
    @Override
    public void run() {
          
   
        for (int i = 0; i < 200; i++) {
          
   
            System.out.println("这是run多线程");
        }
    }

    public static void main(String[] args) {
          
   
        TestRunnable t1 = new TestRunnable();  //创建Runnable接口实现类的实例对象
        new Thread(t1).start();  //将此实例对象作为Thread的参数传进去
        for (int i = 0; i < 200; i++) {
          
   
            System.out.println("这是main线程");
        }
    }
}

运行结果: 案例:模拟龟兔赛跑

package com.qinayu.test;

public class Race implements Runnable {
          
   
    private static String winner;
    @Override
    public void run() {
          
   
        for (int i = 0; i <= 100; i++) {
          
      //假设起点到终点是100米的距离
             boolean flag = gameOver(i);
             if(flag){
          
   
                 break;
             }
            System.out.println(Thread.currentThread().getName()+"距离终点还有"+(100-i)+"米");
        }
    }
    public boolean gameOver(Integer s){
          
     //s为跑了多少米
        if(winner != null){
          
     //说明已经有胜利者了
            return  true;
        }else{
          
   
            //程序执行到这里,说明没有胜利者,那么就要判断找出胜利者
            if(s >= 100){
          
   
                //如果已经跑了大于等于100米,说明胜利了
                winner = Thread.currentThread().getName();
                System.out.println("胜利者是:"+winner);
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
          
   
        Race race = new Race();
        new Thread(race,"兔子").start();
        new Thread(race,"乌龟").start();
    }

}

龟兔不睡觉,正常运行结果: 但若一定想让乌龟赢的比赛,那就手动添加睡眠程序,改造run()方法:

@Override
    public void run() {
          
   
        if(Thread.currentThread().getName().equals("兔子")){
          
     //如果当前线程名称是兔子,那么我们让它休眠100ms
            try {
          
   
                Thread.sleep(6);
            } catch (InterruptedException e) {
          
   
                e.printStackTrace();
            }
        }
        for (int i = 0; i <= 100; i++) {
          
      //假设起点到终点是100米的距离
             boolean flag = gameOver(i);
             if(flag){
          
   
                 break;
             }
            System.out.println(Thread.currentThread().getName()+"距离终点还有"+(100-i)+"米");
        }
    }

兔子睡觉,程序运行结果:

经验分享 程序员 微信小程序 职场和发展