java自定义回调函数 需求描述:我正在敲着代码 让弟弟去帮我买瓶可乐,弟弟卖完可乐之后通知我

java自定义回调函数

定义回调函数接口,以便复用和替换


/**
 * 类名: ICallback
 * 描述: 回调接口
 * 日期: 2022/6/13-11:25
 *
 * @author
 */
public interface ICallback {
    /**
     * 接口默认方法
     *  子类可以重写改方法
     * @param callbackContent
     * @return
     */
    default  String callback(String callbackContent){
        if(callbackContent==null){
            return "执行回调成功!";
        }
        System.out.println(Thread.currentThread().getName()+" "+callbackContent);
        return callbackContent;
    }
}

定义主业务线程


/**
 * 类名: Me
 * 描述:  java自定义回调函数
 *   需求描述:我正在敲着代码 让弟弟去帮我买瓶可乐,弟弟卖完可乐之后通知我
 * 日期: 2022/6/13-11:22
 *
 * @author 林建辉
 */
public class Me {
    /**
     * 我正在做的事情
     */
    private String doingThing;
    /**
     * 回调函数-希望弟弟买完可乐通知我
     */
    private ICallback callback;

    public Me(String doingThing, ICallback callback) {
        this.doingThing = doingThing;
        this.callback = callback;
    }
	/**
	* 初始化弟弟任务线程,并传入回调函数	
	*/
    public void happyCoding(){
        System.out.println(doingThing);
        System.out.println("我让弟弟去买可乐");
        new Thread(new BrotherRunnable("弟弟正在洗碗...", this.callback), "弟弟线程").start();
    }

    public String getDoingThing() {
        return doingThing;
    }

    public void setDoingThing(String doingThing) {
        this.doingThing = doingThing;
    }

    public ICallback getCallback() {
        return callback;
    }

    public void setCallback(ICallback callback) {
        this.callback = callback;
    }


    public static void main(String[] args) {
        Me me=new Me("我正在愉快地敲代码...", new ICallback() {
            @Override
            public String callback(String callbackContent) {
                System.out.println(Thread.currentThread().getName()+":成功地通知了我!");
                return ICallback.super.callback(callbackContent);
            }
        });

        //我正在愉快地敲代码...
        me.happyCoding();
    }
}

定义执行任务线程

行任务的线程持有对主业务线程回调方法的引用

以便于通知主业务线程执行完毕


import java.util.concurrent.TimeUnit;

/**
 * 类名: BrotherRunnable
 * 描述:
 * 日期: 2022/6/13-11:30
 *
 * @author
 */
public class BrotherRunnable implements Runnable {
    private String doingThing;
    private ICallback callback;

    public BrotherRunnable(String doingThing, ICallback callback) {
        this.doingThing = doingThing;
        this.callback = callback;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+":"+doingThing+" "+"耗时1秒");
        try {
            //模拟线程执行任务所需要的时间
            TimeUnit.SECONDS.sleep(1);
        } catch (Exception e) {
            e.printStackTrace();
        }
        callback.callback(": 弟弟回调成功");
    }
}

执行效果图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值