烟台网站建设联系电话,专业低价建设微网站微商城怎么样,如今做那个网站能致富,怎么自己做网站版面设计为什么不建议使用Executors创建线程池分析
不建议使用Executors来创建线程池#xff0c;主要是有两大原因第一个是问题回溯的问题#xff0c;使用Executors都可以使用默认的情况#xff0c;无法用户自定义线程名称不利于排查问题#xff0c;第二个原因也是最主要原因就是线…为什么不建议使用Executors创建线程池分析
不建议使用Executors来创建线程池主要是有两大原因第一个是问题回溯的问题使用Executors都可以使用默认的情况无法用户自定义线程名称不利于排查问题第二个原因也是最主要原因就是线程池的队列长度太长在这种情况下可能会导致往队列中不停的添加任务最终在没有达到队列上线的情况下先把服务器运行的内存资源耗尽导致OOM通过直接使用ThreadPoolExecutor创建线程池设置相对复杂但是设置相对灵活很多。在开发中可以自定义一个Executors来创建线程池在语义相同的情况下增加参数来避免前面说的问题Executors也是可以用来创建但是需要考虑不同的场景。
作者蚂蚁背大象 链接https://juejin.cn/post/7064161230885224462 来源稀土掘金 著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。
Executor框架
Java并发——Executor框架详解Executor框架结构与框架成员
Callable 和 Runable
Java 8 并发教程Threads和Executors 原文Java 8 Concurrency Tutorial: Threads and Executors 译者BlankKelly 来源Java8并发教程Threads和Executors
两种提交方式 submit和execute
submit如果输入runable会重新再调回execute https://zhuanlan.zhihu.com/p/559735913 https://zhuanlan.zhihu.com/p/642309734
Executors支持通过invokeAll()一次批量提交多个callable。这个方法结果一个callable的集合然后返回一个future的列表。
ExecutorService executor Executors.newWorkStealingPool();
ListCallableString callables Arrays.asList(() - task1,() - task2,() - task3);
executor.invokeAll(callables).stream().map(future - {try {return future.get();}catch (Exception e) {throw new IllegalStateException(e);}}).forEach(System.out::println);在这个例子中我们利用Java8中的函数流stream来处理invokeAll()调用返回的所有future。我们首先将每一个future映射到它的返回值然后将每个值打印到控制台。如果你还不属性stream可以阅读我的Java8 Stream 教程。
Executor框架的UML图