java.util.concurrent包(2)——線程池

一、概述
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);
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章