Java多线程实现之Callable详解
作者:not coder
这篇文章主要介绍了Java多线程实现之Callable详解,Callable是一个接口,用于实现多线程,与实现Runnable类似,但是功能更强大,通过实现Callable接口,我们需要重写call()方法,该方法可以在任务结束后提供一个返回值,需要的朋友可以参考下
Java多线程实现之Callable接口
(1)java.util.concurrent.Callable是一个泛型接口,只有一个call()方法
(2)call()方法抛出异常Exception异常,且返回一个指定的泛型类对象
例1:利用Callable接口创建子线程类:
package com.my.frame; import java.util.concurrent.Callable; public class ThreadCall implements Callable<String> { @Override public String call() throws Exception { // TODO Auto-generated method stub System.out.println("====="); return "9999"; } } package com.my.frame; import java.util.concurrent.FutureTask; public class TestThread { public static void main(String[] args) { FutureTask<String> ft = new FutureTask<>(new ThreadCall()); new Thread(ft).start(); } }
例2:
Callable<String> callable = new Callable<String>() { @Override public String call() throws Exception { try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } return "成功"; } }; ExecutorService executorService = Executors.newCachedThreadPool(); Future<String> future = executorService.submit(callable); String result = null; try { result = future.get(); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("result:" + result);
Callable 与 Runnable
都是以 able 结束,可以开启线程
Callable 有返回值
那么现在就有一个问题,子现场是耗时操作的,他的返回值返回给谁用呢,主线程如何不阻塞的情况下拿到子线程的返回值呢?
我们接下来解释这个问题
首先,executorService.submit(callable) 中,executor 调用的不是 execute(callable) 而是 submit(callable)
然后配合 future.get() 去取值,这里的取值,是阻塞式的,能保证我们值的可靠性,这是 Java 在 API 层能做到的上限了。
其中,future 提供一种方法让主线程能够主动去询问后台线程是否执行完毕,他就是:future.isDone()
到此这篇关于Java多线程实现之Callable详解的文章就介绍到这了,更多相关Java多线程Callable内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- Java使用多线程批次查询大量数据(Callable返回数据)方式
- Java通过Callable实现多线程
- Java多线程中Callable和Future的解读
- Java中的Callable实现多线程详解
- Java使用Callable接口实现多线程的实例代码
- Java中Runnable和Callable分别什么时候使用
- Java中Runnable与Callable接口的区别详解
- 详解Java中Callable和Future的区别
- Java使用Runnable和Callable实现多线程的区别详解
- java面试常问的Runnable和Callable的区别
- Java并发教程之Callable和Future接口详解
- Java中callable的实现原理