1、概述
java.util.concurrent中有很是方便的線程池實現,提供的Executor框架包含用於管理實現Runnable任務,Executors類提供了許多不一樣類型的Executor實現的靜態工廠方法。java
2、實例
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任務正在運行ide
②不限制大小的線程池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任務正在運行spa
③單線程池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);
}
}get