java多线程中的回调运用

2026-01-29 0 72,322

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

public class 多线程中的回调 {
    //这里简单地使用future和callable实现了线程执行完后
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ExecutorService executor = Executors.newCachedThreadPool();
        Future future = executor.submit(new Callable() {
            @Override
            public String call() throws Exception {
                System.out.println("call");
                TimeUnit.SECONDS.sleep(1);
                return "str";
            }
        });
        //手动阻塞调用get通过call方法获得返回值。
        System.out.println(future.get());
        //需要手动关闭,不然线程池的线程会继续执行。
        executor.shutdown();
 
    //使用futuretask同时作为线程执行单元和数据请求单元。
    FutureTask futureTask = new FutureTask(new Callable() {
        @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多线程中的回调运用,可以发现通过两种不同方法的相互调用,要在返回值上的获取变得更加容易。虽然严格上来说不是回调,但是运用了相关的回调思想。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:以上部本文内容由互联网用户自发贡献,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。投诉邮箱:3758217903@qq.com

ZhiUp资源网 java教程 java多线程中的回调运用 https://www.zhiup.top/10967.html

相关