
本教程操作环境:windows7系统、java10版,DELL G3电脑。
1.回调方式
(1)class A实现接口CallBack callback——背景1
(2)class A中包含一个class B的引用b ——背景2
(3)class B有一个参数为callback的方法f(CallBack callback) ——背景3
(4)A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
(5)然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D
2.多线程中的回调
Java多线程中可以通过callable和future或futuretask结合来获取线程执行后的返回值。实现方法是通过get方法来调用callable的call方法获取返回值。
其实这种方法本质上不是回调,回调要求的是任务完成以后被调用者主动回调调用者的接口。而这里是调用者主动使用get方法阻塞获取返回值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | public class 多线程中的回调 {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newCachedThreadPool();
Future<String> future = executor.submit( new Callable<String>() {
@Override
public String call() throws Exception {
System.out.println( "call" );
TimeUnit.SECONDS.sleep(1);
return "str" ;
}
});
System.out.println(future.get());
executor.shutdown();
FutureTask<Integer> futureTask = new FutureTask( new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println( "dasds" );
return new Random().nextInt();
}
});
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
@Test
public void test () {
Callable callable = new Callable() {
@Override
public Object call() throws Exception {
return null ;
}
};
FutureTask futureTask = new FutureTask(callable);
}
}
|
以上就是java多线程中的回调运用,可以发现通过两种不同方法的相互调用,要在返回值上的获取变得更加容易。虽然严格上来说不是回调,但是运用了相关的回调思想。