Java并发之ThreadPool
Posted 三名狂客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发之ThreadPool相关的知识,希望对你有一定的参考价值。
一、ThreadPool 简介
线程池模式,允许我们控制应用程序创建的线程数,生命周期,以及计划任务的执行并将传入的任务保留在队列中。
二、线程池相关类和接口
(1) Executors 类
Executors
是一个帮助类,提供了创建几种预配置线程池实例的方法。如果你不需要应用任何自定义的微调,可以调用这些方法创建默认配置的线程池,因为它能节省很多时间和代码
(2) Executor 和 ExecutorService 接口
Executor
和 ExecutorService
接口则用于与 Java 中不同线程池的实现协同工作。通常,你应该将代码与线程池的实际实现分离,并在整个应用程序中使用这些接口。
Executor
接口提供了一个 execute()
方法将 Runnable 实例提交到线程池中执行。
ExecutorService
接口则包含大量用于控制任务进度和管理服务终止的方法。我们可以使用此接口来提交要执行的任务,还可以使用此接口返回的 Future 实例控制任务的执行。
ExecutorService
中的 submit()
方法被重载为支持 Runnable
或 Callable
,它们都是功能接口,可以接收一个 lambdas 作为参数( 从 Java 8 开始 ):
- 使用 Runnable 作为参数的方法不会抛出异常也不会返回任何值 ( 返回
void
) - 使用 Callable 作为参数的方法则可以抛出异常也可以返回值。
如果想让编译器将参数推断为 Callable 类型,只需要 lambda 返回一个值即可。
三、代码实现
package day01;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* 线程池相关的测试类
*
* @author zc
*
*/
public class ThreadPoolTest
public static void main(String[] args) throws InterruptedException, ExecutionException
Executor excutor = Executors.newFixedThreadPool(10);
excutor.execute(()-> System.out.println("Hello World!"));
ExecutorService excutorService = Executors.newFixedThreadPool(10);
Future<String> future = excutorService.submit(()->"hahaha");
// 一些其他操作
String result =future.get();
System.out.println(result);
以上是关于Java并发之ThreadPool的主要内容,如果未能解决你的问题,请参考以下文章