java自定义回调函数
定义回调函数接口,以便复用和替换
public interface ICallback {
default String callback(String callbackContent){
if(callbackContent==null){
return "执行回调成功!";
}
System.out.println(Thread.currentThread().getName()+" "+callbackContent);
return callbackContent;
}
}
定义主业务线程
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;
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(": 弟弟回调成功");
}
}
执行效果图