背景:
java 并发中concurrent包下有很多关于并发的操作,使用最常见的为ExecutorService
支持类型:
Callable
Runnable
此两种类型中的Callable是有返回值的,那么如果很好的获取执行结果?
依赖:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
实现:
public static void getResult() throws Exception { long begin = System.currentTimeMillis(); ExecutorService service = Executors.newFixedThreadPool(10000); List<StringCallable> all = new ArrayList<StringCallable>(); for (int i = 0; i < 1000; i++) { all.add(new StringCallable(i)); } List<Future<String>> result = service.invokeAll(all); for (Future<String> future : result) { String list = future.get(); System.out.println(list); } service.shutdown(); long end = System.currentTimeMillis(); System.out.println("--" + (end - begin)); }
直接获取:
public static void get() throws Exception { long begin = System.currentTimeMillis(); ExecutorService service = Executors.newFixedThreadPool(10000); for (int i = 0; i < 1000; i++) { Future<String> resul = service.submit(new StringCallable(1000)); System.out.println(resul.get()); } service.shutdown(); long end = System.currentTimeMillis(); System.out.println("cost:" + (end - begin)); }
后者会有等待而不是并发,因此在使用的时候需要注意
基类:
class StringCallable implements Callable<String> { private int index = 0; public StringCallable(int index) { super(); this.index = index; } public String call() throws Exception { System.out.println("index:" + index); return RandomStringUtils.random(12, "abcdefghijklmnopqrstuvwxyz"); } }
相关推荐
主要为大家详细介绍了java ExecutorService使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
今天小编就为大家分享一篇关于在spring boot中使用java线程池ExecutorService的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
ExecutorService的execute和submit方法
ExecutorService方法案例文件.zip
接口 java.util.concurrent.ExecutorService 表述了异步执行的机制,并且可以让任务在后台执行。壹個 ExecutorService 实例因此特别像壹個线程池。事实上,在 java.util.concurrent 包中的 ExecutorService 的实现...
本程序实现了ExecutorService线程池,内置说明txt说明,可以参考
如果 Future 结果没有完成,调用 get() 方法,程序会 阻塞 在那里,直至获取返回结果 先来看第一种实现方式,假设任务 A 由于参数原因,执行时间相对任务 B,C,D 都要长很多,但是按照程序的执行顺序,程序在 get()...
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接
主要介绍了Java使用ExecutorService来停止线程服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
NULL 博文链接:https://x125858805.iteye.com/blog/2191873
4.newSingleThreadExecutor 创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。``
2_ExecutorService源码阅读1
NULL 博文链接:https://songjianyong.iteye.com/blog/2056990
使用 ExecutorService 多线程处理某个进程的简单示例。
主要帮助大家理解java多线程中ExcetorServiced的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
ExecutorService10个要诀和技巧编程开发技术共9页.pdf.zip
主要介绍了Java利用ExecutorService实现同步执行大量线程,ExecutorService可以维护我们的大量线程在操作临界资源时的稳定性。
主要介绍了java中Executor,ExecutorService,ThreadPoolExecutor详解的相关资料,需要的朋友可以参考下
主要介绍了Java 线程池ExecutorService详解及实例代码的相关资料,线程池减少在创建和销毁线程上所花的时间以及系统资源的开销.如果不使用线程池,有可能造成系统创建大量线程而导致消耗系统内存以及”过度切换
主要介绍了详解JDK中ExecutorService与Callable和Future对线程的支持的相关资料,希望通过本文能帮助到大家,需要的朋友可以参考下