java.util.concurrent包中執行緒池Executors的使用
阿新 • • 發佈:2019-02-20
- 執行緒池的概念與Executors類的使用
(1)建立固定大小的執行緒池–當有多個任務時,會先按照執行緒池中的資料執行任務,其他任務處於等待過程中,等執行完這批任務後再執行下批任務。
(2)建立快取執行緒池,會根據任務的多少來建立執行緒
(3)建立單一執行緒池(該執行緒死掉後,系統會自動建立另一個執行緒)
package cn.threadPool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolTest {
/**
* 建立執行緒池
*/
public static void main(String[] args) {
// 建立執行緒池,執行緒池中有三個執行緒
//ExecutorService threadPool=Executors.newFixedThreadPool(3);
//建立快取執行緒,會根據任務自動建立執行緒的個數
ExecutorService threadPool=Executors.newCachedThreadPool();
for (int n=0;n<10;n++){
final int task=n;
// 往執行緒池中放10個任務,但執行緒池中只有三個執行緒,會三個任務執行完之後再執行三個。
threadPool.execute(new Runnable(){
@Override
public void run() {
for(int i=0;i<10;i++){
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+" 迴圈到"+i+" ,loop "+task);
}
}
});
}
System.out.println("任務結束");
//threadPool.shutdown();//執行緒執行完所有任務時,會關掉程式
/**
* 用執行緒池啟動定時任務
*
*/
Executors.newScheduledThreadPool(3).scheduleAtFixedRate(new Runnable(){
@Override
public void run() {
System.out.println("booming");
}
}, 2, 2, TimeUnit.SECONDS);
}
}