有两个类A和B,一个接口CallBack,A实现CallBack接口,在A类中调用B类的方法,该方法参数中有CallBack类型的参数,则B类中被调用的方法可以通过该参数调用A中实现CallBack的方法;
例如:
有A类
public class A implements CallBack{
@Override
public void alreadyFinish(String msg) {
System.out.println("A收到B的消息"+msg+"已经做完了");
}
public void createTask(String task) throws InterruptedException {
System.out.println("A创建新任务:"+task);
B b = new B();
b.acceptMsg(this,task);
}
}
接口CallBack:
public interface CallBack {
public void alreadyFinish(String msg);
}
B类:
public class B {
public void acceptMsg(CallBack callBack, String task) throws InterruptedException {
System.out.println("B收到"+task+",开始工作");
Thread.sleep(2 * 1000);//模拟完成任务的时间
System.out.println("B完成任务");
callBack.alreadyFinish(task);
}
}
A创建新任务给B,B收到任务开始执行,执行完毕调用A的alreadyFinish方法通知A
测试类:
public class Test {
public static void main(String[] args){
A a = new A();
try {
a.createTask("1号任务");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果:
若B类执行这个任务需要较长时间,而A类又有其他任务需要做,A类调用B类的方法时可以另起一个线程:
public class A implements CallBack{
@Override
public void alreadyFinish(String msg) {
System.out.println("A收到B的消息"+msg+"已经做完了");
}
public void createTask(String task) {
System.out.println("A创建新任务:"+task);
B b = new B();
//b.acceptMsg(this,task);
new Thread(new Runnable() {
@Override
public void run() {
try {
b.acceptMsg(A.this, task);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
System.out.println("A类执行其他任务");
}
}
运行结果: