Java多线程实现之Callable详解
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的实现原理
相关文章
java组件commons-fileupload实现文件上传
这篇文章主要介绍了java借助commons-fileupload组件实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
springboot中PostMapping正常接收json参数后返回404问题
这篇文章主要介绍了springboot中PostMapping正常接收json参数后返回404问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-05-05
解决@Autowired报错Could not autowire. No bea
介绍了在IDEA中使用@Autowired报错Couldnot autowire. No beans of 'XXX' type found的解决方法,原因是@Autowired在注入service时,由于service接口没有实现类,而mybatis仅需提供Dao接口,导致@Autowired无法识别2024-12-12
Mybatis sqlMapConfig.xml中的mappers标签使用
这篇文章主要介绍了Mybatis sqlMapConfig.xml中的mappers标签使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。2022-01-01
Java利用HttpClient模拟POST表单操作应用及注意事项
本文主要介绍JAVA中利用HttpClient模拟POST表单操作,希望对大家有所帮助。2016-04-04


最新评论