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方法阻塞获取返回值。

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多线程中的回调运用 的全部内容, 来源链接: utcz.com/z/542731.html

回到顶部