• 技术文章 >java >java基础

    java多线程中的回调运用

    小妮浅浅小妮浅浅2021-02-24 09:52:12原创3318

    本教程操作环境: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<String> future = executor.submit(new Callable<String>() {
                @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<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多线程中的回调运用,可以发现通过两种不同方法的相互调用,要在返回值上的获取变得更加容易。虽然严格上来说不是回调,但是运用了相关的回调思想。

    专题推荐:java多线程 回调
    品易云
    上一篇:java内部类实例化方法及出错解决 下一篇:java中异步回调的基本内容

    相关文章推荐

    • java成员内部类的内容介绍• 局部内部类在java中的使用注意点• java中匿名内部类的内容理解• 静态内部类在java的单例用法• java内部类的特性分析• java内部类实例化方法及出错解决• java回调机制的理解和使用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网