1.背景
举个例子有个程序员和一个项目经理,XX项目经理向程序员安排任务让程序员去完成,程序员获得任务并记下是XX项目经理安排的任务,程序员将任务完成后,获取通知XX项目经理的方式,发送一条信息通知项目经理任务已经完成。
2.实现
新建一个项目经理类:
public class ProjectManager { private String name; public ProjectManager(String name) { this.name =name; } public String getName() { return this.name; } /** * 通知方法 * @param msg */ public void noticeMe(String msg) { System.err.println(msg); } /** * 安排任务 * @param task */ public void arrange(String task) { //安排程序员干活 new Programmer().receiveTask(task, this); } public void doOtherWork() { System.err.println("项目经理干其他事情..."); } }
新建一个程序员类:
import java.util.concurrent.TimeUnit; public class Programmer { //记下是XX项目经理,而不是其他项目经理 ProjectManager manager; /**程序员接受任务*/ public void receiveTask(String task,ProjectManager manager) { this.manager = manager; try { //程序员开始执行任务 this.excuteTask(task); } catch (InterruptedException e) { e.printStackTrace(); } } /**执行任务*/ private void excuteTask(String task) throws InterruptedException { System.err.println("执行项目经理:"+manager.getName()+"安排的任务-->"+task); //任务执行中 TimeUnit.SECONDS.sleep(1); //任务完成 this.finished(task); } /**任务完成*/ public void finished(String task) { //获取通知项目经理的方法,并发出通知 //进行函数回调,这里还不算真正的回调 manager.noticeMe(manager.getName()+"你好,你安排的任务"+task+"已经完成!"); } }
测试
public class CallbackTest { /** * @param args */ public static void main(String[] args) { ProjectManager prjMgr = new ProjectManager("王响"); prjMgr.arrange("今晚完成数据库设计..."); prjMgr.doOtherWork(); } }
参考:
https://www.cnblogs.com/cxchanpin/p/6791696.html