本教程操作环境: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
暂无评论内容