java程序设计中线程的方法回调(龟兔赛跑)

在线程中方法回调,就是在回调的地方实现interface接口

下面案例(龟兔赛跑)

mian方法类

public class Test {

    public static void main(String[] args) {
        // 有两个动物,乌龟和兔子 都能跑
        // 兔子跑的快点,但是容易打盹,
        // 乌龟跑的慢点,坚持不懈
        // 从长度 200米
        Rabbit rabbit = new Rabbit();
        Tortoise t = new Tortoise();
        RabbitCallBack rBack = new RabbitCallBack(t);
        // 将rBack给rabbit
        rabbit.callBack = rBack;

        TortoiseCallBack tBack = new TortoiseCallBack(rabbit);
        //将tBack 给乌龟
        t.callBack = tBack;
        rabbit.start();
        t.start();
    }

}

创建一个动物类

public abstract class Animal extends Thread {

    public int length = 200;

    public abstract void running();

    @Override
    public void run() {
        super.run();
        while (length > 0) {
            running();
        }
        System.out.println(Thread.currentThread().getName() + "赢得了比赛");
    }

    // 1.在需要回调数据的地方,声明一个接口
    public static interface CallBack {
        public void win();
    }
    // 第二部 创建接口对象
    public CallBack callBack;
}

创建兔子类继承与动物并实现动物类跑的方法

public class Rabbit extends Animal {
    Rabbit() {
        setName("兔子");
    }

    @Override
    public void running() {
        // 每次跑多远
        int dis = (int) (Math.random() * 100) + 1;
        length -= dis;
        if (length <= 0) {
            length = 0;
            System.out.println("兔子胜了!");
            if (callBack !=null) {
                callBack.win();
            }
        }
        System.out.println("兔子跑了"+dis+ " 米,还剩"+length+ " 米");
        try {
            sleep(1000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

创建一个乌龟类

public class Tortoise extends Animal {

    public Tortoise() {
        setName("乌龟");
    }

    @Override
    public void running() {
        int dis = (int) (Math.random() * 10) + 1;
        length -= dis;
        if (length <= 0) {
            length = 0;
            System.out.println("乌龟赢了");
            if (callBack != null) {
                callBack.win();
            }
        }
        System.out.println("乌龟跑了"+dis+ " 米,还剩"+length+ " 米");
        try {
            sleep(50);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
public class RabbitCallBack implements CallBack {
    // 回调,当兔子赢得比赛的时候,要结束掉乌龟的线程
    //这里要从写win方法
    Tortoise tortoise;

    public RabbitCallBack(Tortoise tortoise) {
        super();
        this.tortoise = tortoise;
    }


    @SuppressWarnings("deprecation")
    @Override
    public void win() {
        tortoise.stop();//结束掉乌龟的线程,虽已过时还是可以用的(简单的用下不推荐用)

    }

}
public class TortoiseCallBack implements CallBack {
// 回调,当乌龟赢得比赛的时候,要结束掉兔子的线程
    Rabbit rabbit;

    public TortoiseCallBack(Rabbit rabbit) {
        super();
        this.rabbit = rabbit;
    }

    @SuppressWarnings("deprecation")
    @Override
    public void win() {
        rabbit.stop();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值