Guava——扩展原生JDK线程
1.使用JDK原生的线程池
当要使用线程去执行一个任务时,可以使用ExecutorService.submit(new Callable());
这样可以不影响其他的业务的执行,异步的执行我们想要的任务;
以下面是一个简单的接口为例:
/*** JDK 线程测试*/
@RestController
public class JdkThreadController {@RequestMapping("/test/jdk")public void execute() throws ExecutionException, InterruptedException {// 固定大小的线程池 核心线程数和最大线程数=10ExecutorService executorService = Executors.newFixedThreadPool(10);// 记录开始时间Long start = System.currentTimeMillis();// 一个耗时的任务Future future = executorService.submit(new Callable() {/*** Computes a result, or throws an exception if unable to do so.** @return computed result* @throws Exception if unable to compute a result*/@Overridepublic Boolean call() throws Exception {//模拟耗时5sThread.sleep(5000);return true;}});// 阻塞 等待执行结果Boolean result = future.get();//打印结果System.out.println("任务执行成功了,执行结果=" + result);// 记录结束时间Long end = System.currentTimeMillis();// 执行时间System.out.println("线程执行结束了,耗时=" + (end - start) + "毫秒");System.out.println("-----------------------华丽的分割线-----------------------");}
}
但是当有多个任务提交到线程池去执行的情况下,会有多个Future调用get()获取执行结果的时候,会造成多个future()的get串行的场景。
如果多个get(),每个get()阻塞很久,接口性能也就会受到影响。
2.guava对原生JDK线程的扩展
Guava为Java并行编程Future提供了很多有用扩展,其主要接口为ListenableFuture,并借助于Futures静态扩展。
继承自Future的ListenableFuture,允许我们添加回调函数在线程运算完成时返回值或者方法执行完成立即返回。
如果Future带有回调,这样是不是可以避免我们自己直接操作get()获取返回值,直接帮我们执行一些后续的工作?
依赖的Guava包:
com.google.guava g
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
