java多线程中的回调运用

本教程操作环境: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方法阻塞获取返回值。

publicclass多线程中的回调{
//这里简单地使用future和callable实现了线程执行完后
publicstaticvoidmain(String[]args)throwsExecutionException,InterruptedException{
ExecutorServiceexecutor=Executors.newCachedThreadPool();
Future<String>future=executor.submit(newCallable<String>(){
@Override
publicStringcall()throwsException{
System.out.println("call");
TimeUnit.SECONDS.sleep(1);
return"str";
}
});
//手动阻塞调用get通过call方法获得返回值。
System.out.println(future.get());
//需要手动关闭,不然线程池的线程会继续执行。
executor.shutdown();

//使用futuretask同时作为线程执行单元和数据请求单元。
FutureTask<Integer>futureTask=newFutureTask(newCallable<Integer>(){
@Override
publicIntegercall()throwsException{
System.out.println("dasds");
returnnewRandom().nextInt();
}
});
newThread(futureTask).start();
//阻塞获取返回值
System.out.println(futureTask.get());
}
@Test
publicvoidtest(){
Callablecallable=newCallable(){
@Override
publicObjectcall()throwsException{
returnnull;
}
};
FutureTaskfutureTask=newFutureTask(callable);

}
}

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容