Java并发之ThreadPool

Posted 三名狂客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java并发之ThreadPool相关的知识,希望对你有一定的参考价值。

一、ThreadPool 简介

线程池模式,允许我们控制应用程序创建的线程数,生命周期,以及计划任务的执行并将传入的任务保留在队列中。

二、线程池相关类和接口

(1) Executors 类

Executors 是一个帮助类,提供了创建几种预配置线程池实例的方法。如果你不需要应用任何自定义的微调,可以调用这些方法创建默认配置的线程池,因为它能节省很多时间和代码

(2) Executor 和 ExecutorService 接口

ExecutorExecutorService 接口则用于与 Java 中不同线程池的实现协同工作。通常,你应该将代码与线程池的实际实现分离,并在整个应用程序中使用这些接口。

Executor 接口提供了一个 execute() 方法将 Runnable 实例提交到线程池中执行。

ExecutorService 接口则包含大量用于控制任务进度和管理服务终止的方法。我们可以使用此接口来提交要执行的任务,还可以使用此接口返回的 Future 实例控制任务的执行。

ExecutorService 中的 submit() 方法被重载为支持 RunnableCallable ,它们都是功能接口,可以接收一个 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的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出Java多线程之ThreadPool(上)

深入浅出Java多线程之ThreadPool(上)

Java核心深入理解线程池ThreadPool

如何配置IIS处理多并发请求及存在的问题

java高并发编程

Java并发编程:线程池