Java线程实现龟兔赛跑(静态代理)

Java复习 同时被 2 个专栏收录
31 篇文章 0 订阅
101 篇文章 13 订阅

🍜Thread线程🍤

1、龟兔赛跑
2、静态代理
3、内部类创建线程

🍤1、龟兔赛跑

比赛规则:模拟龟兔赛跑 兔子每跑十步休息10毫秒,乌龟正常跑,只要有参赛者中有一个跑了100步就结束。

  • 思路创建一个线程,实现两者的跑步,通过线程的名字区分实现两者的线程实现
public class Thread04 implements Runnable {
    //定义一个变量判断比赛情况
    String gameOver=null;

    @Override
    public void run() {
        for ( int step = 1; step <=100; step++) {
            //如果线程名字是兔子直接运行if里的内容否则就是乌龟
            if("兔子".equals(Thread.currentThread().getName())&&step%10==0){
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName()+"跑第"+step+"步");
            if(isOk(step)){
            //此处不能打印出胜利信息,会出现两者都胜利的情况
             //System.out.println(Thread.currentThread().getName()+"获胜");
                break;
            }

        }


    }
    //判断方法
    private boolean isOk(int step) {
        if(gameOver!=null){
            return true;
        }
        if(step==100){
            gameOver=Thread.currentThread().getName();
            System.out.println(Thread.currentThread().getName()+"获胜");
            return true;
        }
        return false;

    }
//测试
    public static void main(String[] args) {
        Thread04 t4=new Thread04();
        new Thread(t4,"兔子").start();
        new Thread(t4,"乌龟").start();
    }
}

结果:

在这里插入图片描述
主要难点,别忘记是两个线程,只关到100步的另一个还是会执行跑到100步



🍤2、静态代理

代理模式 : 
静态代理   动态代理静态代理:
真实角色
代理角色
要求:
    1.代理角色与真实角色实现相同的接口
    2.代理角色持有真实角色的引用
    3.代理行为
    
    举例:买房

public class Static02 {
    public static void main(String[] args) {
        //通常写法
        Customer cs=new Customer();
        Medium med=new Medium(cs);//静态代理
        med.look();
        System.out.println("-------------------");
        new Medium(new Customer()).look();
    }
}
//买房看房
interface House{
    //看房功能
    void look();
}

//中介
class Medium implements House{
    private Customer cus=null;
    public Medium(Customer c){
        //初始化
        this.cus=c;
    }
    @Override
    public void look() {
        System.out.println("询问客户的需求~~");
        System.out.println("寻找用户所需房源~~");
        cus.look();
        System.out.println("决定签单~~~");
    }
}

//客户
class Customer implements House{

    @Override
    public void look() {
        System.out.println("决定买房~~~");
    }
}

在这里插入图片描述


🍤3、内部类创建线程

  • 静态内部类创建线程
  • 局部匿名类创建线程
public class Thread06 {
    //静态内部类
    static class inner implements Runnable{
        @Override
        public void run() {
            for (int i = 0; i <20 ; i++) {
                System.out.println("aaaaaaaaaa");
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    public static void main(String[] args)  {
        Thread06.inner ti=new Thread06.inner();
        new Thread(ti).start();
        //局部匿名类
        new Thread(()->{
            for (int i = 0; i <20 ; i++) {
                System.out.println("bbbbbbbbbb");
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();


    }

}

在这里插入图片描述


  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

每日小新

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值