Home  >  Article  >  Java  >  Java thread pool framework

Java thread pool framework

高洛峰
高洛峰Original
2017-02-11 16:52:461296browse

This article mainly introduces the relevant knowledge of Java thread pool framework. It has a very good reference value. Let’s take a look at it with the editor

1. Thread pool structure diagram

Java 线程池框架

2. Example

Define thread interface

public class MyThread extends Thread {
 @Override
 publicvoid run() {
 System.out.println(Thread.currentThread().getName() + "正在执行");
 }
}

1: newSingleThreadExecutor

ExecutorService pool = Executors. newSingleThreadExecutor();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 //关闭线程池
 pool.shutdown();

Input result:

pool-1-thread-1正在执行
pool-1-thread-1正在执行
pool-1-thread-1正在执行

2: newFixedThreadPool

ExecutorService pool = Executors.newFixedThreadPool(3);
Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
pool.shutdown();

Input result:

pool-1-thread-1正在执行
pool-1-thread-2正在执行
pool-1-thread-1正在执行
pool-1-thread-2正在执行

3 :newCachedThreadPool

ExecutorService pool = Executors.newCachedThreadPool();
 Thread t1 = new MyThread();
 Thread t2 = new MyThread();
 Thread t3 = new MyThread();
 Thread t4 = new MyThread();
 Thread t5 = new MyThread();
 //将线程放入池中进行执行
 pool.execute(t1);
 pool.execute(t2);
 pool.execute(t3);
 pool.execute(t4);
 pool.execute(t5);
 //关闭线程池
 pool.shutdown();

Input result:

pool-1-thread-2正在执行
pool-1-thread-4正在执行
pool-1-thread-3正在执行
pool-1-thread-1正在执行
pool-1-thread-5正在执行

4 :ScheduledThreadPoolExecutor

##

ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间就触发异常
  @Override
  public void run() {
   //throw new RuntimeException();
   System.out.println("================");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);
pool.scheduleAtFixedRate(new Runnable() {//每隔一段时间打印系统时间,证明两者是互不影响的
  @Override
  public void run() {
   System.out.println("+++++++++++++++++");
  }
 }, 1000, 2000, TimeUnit.MILLISECONDS);

Input result:

================
+++++++++++++++++
+++++++++++++++++
+++++++++++++++++

3. Thread pool core parameters

corePoolSize: The number of core threads in the pool

maximumPoolSize: The maximum thread allowed in the pool number.

keepAliveTime: When the number of threads is greater than the core, this is the maximum time for excess idle threads to wait for new tasks before terminating.

unit: The time unit of the keepAliveTime parameter.

workQueue: Queue used to hold tasks before execution. This queue only holds Runnable tasks submitted by the execute method.

threadFactory: Factory used by the executor to create new threads.

handler: The handler used when execution is blocked due to exceeding the thread scope and queue capacity.

ThreadPoolExecutor: The underlying implementation of the Executors class.

3.1 Task queuing mechanism

SynchonousQueue: Synchronous queue, the queue is directly submitted to thread execution without maintaining them. At this time, the thread pool is usually Unbounded

LinkedBlockingQueue: Unbounded queue. When the number of thread pool threads reaches the maximum number, new tasks will wait in the queue for execution, which may cause the queue to expand infinitely

ArrayBlockingQueue: Bounded Queue helps prevent resource exhaustion. Once the upper limit is reached, new tasks may be lost

Note:

newSingleThreadExecutor, newFixedThreadPool use is LinkedBlockingQueue

newCachedThreadPool uses SynchonousQueue

newScheduledThreadPool uses DelayedWorkQueue

3.2 Thread execution process

Java 线程池框架

3.3 Thread size determination:

cpu-intensive: Open as few threads as possible, the optimal number of threads is Ncpu+ 1

io-intensive: multiple threads, 2Ncpu

Mixed: depending on the situation, it can be split into io-intensive and cou-intensive

More Java thread pools For framework-related articles, please pay attention to the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn