一、概述
java.util.concurrent中有非常方便的線程池實現,提供的Executor框架包含用於管理實現Runnable任務,Executors類提供了許多不同類型的Executor實現的靜態工廠方法。
二、實例
public class MyTask
implements Runnable
{
public void
run()
{
System.out.println(Thread.currentThread().getName() +
"任務正在運行");
}
}
①固定大小線程池newFixedThreadPool
public class
FixedThreadPoolTest
{
public static void main(String[] args)
{
//
創建固定大小爲5的線程池
ExecutorService threadPool =
Executors.newFixedThreadPool(5);
// 模擬執行了20個任務,而線程池中只有5個線程
for (int i = 0;
i < 20; i++)
{
try
{
//
一次執行五個任務,其餘任務排隊
Thread.sleep(20);
threadPool.execute(new
MyTask());
}
catch (Exception
e)
{
e.printStackTrace();
}
}
threadPool.shutdown();
}
}
pool-1-thread-1任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-5任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-5任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-5任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-5任務正在運行
②不限制大小的線程池newCachedThreadPool
public class
CachedThreadPool
{
public static void main(String[] args)
{
//
不限制線程池的大小
// 當以前創建的線程可以使用時會重新使用
ExecutorService threadPool =
Executors.newCachedThreadPool();
for (int i = 0; i < 20;
i++)
{
threadPool.execute(new
MyTask());
}
threadPool.shutdown();
}
}
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-6任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-4任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-5任務正在運行
pool-1-thread-7任務正在運行
pool-1-thread-3任務正在運行
pool-1-thread-2任務正在運行
pool-1-thread-8任務正在運行
pool-1-thread-6任務正在運行
③單線程池newSingleThreadExecutor
public class
SingleThreadPool
{
public static void main(String[] args)
{
//
單線程池
ExecutorService threadPool = Executors.newSingleThreadExecutor();
for
(int i = 0; i < 20; i++)
{
threadPool.execute(new
MyTask());
}
threadPool.shutdown();
}
}pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
pool-1-thread-1任務正在運行
④定時任務線程池newScheduledThreadPool
public class
ScheduledPool
{
public static void main(String[] args)
{
//
定時任務線程池
ScheduledExecutorService threadPool =
Executors.newScheduledThreadPool(3);
// 三秒後運行任務
threadPool.schedule(new
MyTask(), 3, TimeUnit.SECONDS);
//
五秒鐘後運行,每隔兩秒鐘執行一次
threadPool.scheduleAtFixedRate(new MyTask(), 5, 2,
TimeUnit.SECONDS);
}
}