Java 线程池和多线程编程 ——线程池理解与创建

Posted jmrli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 线程池和多线程编程 ——线程池理解与创建相关的知识,希望对你有一定的参考价值。

JDK1.5 引入了 Executor框架 ,对任务提交和执行进行解耦 , 定义任务后交由线程池执行。

线程池是由java.util.concurrent 包中Executors类的工厂方法创建线程池。

--------------------------------------------------------------------------------

   创建一个可重用固定线程数的线程池,以共享的无界队列方式来运行这些线程。

   public static ExecutorService newFixedThreadPool(int nThreads)  nThreads - 池中的线程数

 ExecutorService pool = Executors.newFixedThreadPool(6);

创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。
public static ExecutorService newSingleThreadExecutor()
ExecutorService threadPool = Executors.newSingleThreadExecutor();

 

   创建一个安排在给定延迟后运行命令或者定期地执行的拥有3个线程的线程池。

 初始延迟为6秒 , 间隔定时为2秒 的定时任务。

  Executors.newScheduledThreadPool(3).scheduleAtFixedRate( ()-> 
                    System.out.println("bombing!");
                    , 6, 2, TimeUnit.SECONDS);
    

创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。

public static ExecutorService newSingleThreadExecutor()

--------------------------------------------------------------------------------

线程池框架提供了两种方式提交任务,根据不同的业务需求选择不同的方式。

①  Executor.execute()

   void execute(Runnable command)

在未来某个时间执行给定的命令。该命令可能在新的线程、已入池的线程或者正调用的线程中执行,这由 Executor 实现决定。

②  ExecutorService.submit()

<T> Future<T>
submit(Callable<T> task) 
提交一个返回值的任务用于执行,返回一个表示任务的未决结Future。
 Future<?> submit(Runnable task) 
提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。
<T> Future<T>
submit(Runnable task, T result) 
提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。

两个方法都可以向线程池提交任务,execute()方法的返回类型是void,它定义在Executor接口中,

而submit()方法可以返回持有计算结果的Future对象,它定义在ExecutorService接口中

 

https://www.jianshu.com/p/87bff5cc8d8c

深度剖析Executor框架 ↓↓↓

https://blog.csdn.net/javazejian/article/details/50890554

以上是关于Java 线程池和多线程编程 ——线程池理解与创建的主要内容,如果未能解决你的问题,请参考以下文章

Spring Batch 连接池和多线程

Java并发编程:4种线程池和缓冲队列BlockingQueue

JAVA线程池shutdown和shutdownNow的区别

Java之线程池和Lambda表达式

Java 线程池和可运行对象创建可运行对象

HTTP异步连接池和多线程实践