实现Runnable接口实现多线程(龟兔赛跑代码示例)

1.怎样实现Runnable接口实现多线程:

1.创建一个类声明是实现了Runable的接口

2.实现run()方法,编辑执行体

3.创建线程对象,调用start()方法启动线程

2.继承Thread与实现Runnable接口的区别:

继承Thread启动线程:子类对象.start()

实现Runnable启动线程:传入目标对象+Thread对象.start()

3.比起Thread更推荐使用Runnable的原因:

避免了单继承的局限性(Thread只能单继承),灵活方便,方便同一个对象,被多个线程使用

4.发现问题:

多个线程操作同一个资源的情况下线程不安全(解决方法谈到线程同步时再说吧)

5.龟兔赛跑代码示例(多个线程操作同一个对象):

赛道为对象,龟兔为线程

package Thread;


public class Race implements Runnable{
    //胜利者 static静态修饰保证他只有一个
    private static String winner;
    @Override
    public void run(){
        for(int i = 0;i <= 100;i++){
            //模拟兔子休息
            if(Thread.currentThread().getName().equals("兔子")&& i%10==0){
                try {
                    Thread.sleep(1);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
            }
            //判断比赛是否结束
            boolean flag = gameOver(i);
            //如果尼塞结束了终止程序
            if(flag){
                break;
            }
            //Thread.currentThread().getName()获取线程的名字
            System.out.println(Thread.currentThread().getName()+"-->跑了"+i+"步");
        }
    }
    //判断是否完成比赛
    private boolean gameOver(int steps){
      //判断是否存在胜利者
        if(winner!=null){
            return true;
        }{
            if(steps==100){
                winner = Thread.currentThread().getName();
                System.out.println("winner is"+winner);
                return true;
            }
        }
        return false;
    }

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

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值