线程池 线程调度
1. 线程池
-
线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应速度。
-
线程池的体系结构
java.util.Concurrent.Executor
:负责线程的使用与调度的根接口。ExecutorService
子接口:线程池的主要接口。ThreadPoolExecutor
:线程池的实现类。ScheduledExecutorService
子接口:负责线程的调度。ScheduledThreadPoolExecutor
:继承了ThreadPoolExecutor
,实现了ScheduledExecutorService
。
- 工具类:
Executors
Executors.newCachedThreadPool()
:缓存线程池,线程池的数量不固定,可以根据需求自动的更改数量。Executors.newFixedThreadPool(int)
:创建固定大小的线程池。Executors.newSingleThreadExecutor()
:创建单个线程的线程池,线程池中只有一个线程。
-
示例:
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class TestThreadPool { public static void main(String[] args) { ThreadPoolDemo tpd = new ThreadPoolDemo(); // 1. 创建线程池 ExecutorService pool = Executors.newFixedThreadPool(5); // 2. 使用线程池 for (int i = 0; i < 10; i++) { pool.submit(tpd); } // 3. 关闭线程池 pool.shutdown(); } } class ThreadPoolDemo implements Runnable{ private int num = 10; @Override public void run() { System.out.println(Thread.currentThread().getName() + " : " + num); } }
2. 线程调度
-
ScheduledExecutorService Executors.newScheduledThreadPool()
。 -
示例:
import java.util.concurrent.Callable; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class TestScheduleThreadDemo { public static void main(String[] args) { int num = 10; // 1. 创建线程池 ScheduledExecutorService pool = Executors.newScheduledThreadPool(2); // 2. 使用线程池 for (int i = 0; i < 5; i++) { pool.schedule(new Callable<Integer>() { @Override public Integer call() throws Exception { System.out.println(Thread.currentThread().getName() + " : " + num); return num; } }, 2, TimeUnit.SECONDS); } // 3. 关闭线程池 pool.shutdown(); } }