• 技术文章 >java >java基础

    java多线程中的回调运用

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

    本教程操作环境: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 多线程中的回调 {

        //这里简单地使用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学习网