JAVA 常用執行緒池
阿新 • • 發佈:2018-12-21
JAVA 固定執行緒池 FixedThreadPool
執行緒池介紹
Java通過Executors提供四種執行緒池:
newCachedThreadPool
建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。
newFixedThreadPool
建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。
newScheduledThreadPool
建立一個定長執行緒池,支援定時及週期性任務執行。
newSingleThreadExecutor
建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先順序)執行。
我個人喜歡並且常用是 FixedThreadPool
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by liang on 2017/7/7.
*/
public class ThreadTest {
/**
* main 方法
* @param args
*/
public static void main(String args[]){
ThreadTest threadTest = new ThreadTest();
threadTest.exeThread();//呼叫執行
}
public void exeThread(){
//建立 固定的執行緒池,執行緒池的默認個數為 3 個執行緒
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
//往執行緒池內 添裝 10個待執行執行緒
for(int i=0;i<10;i++){
fixedThreadPool.execute(new ThreadK(i));
}
}
/**
* 建立一個 需要執行執行緒類
*/
public class ThreadK implements Runnable{
int count ;
public ThreadK(int i) {
count = i;
}
/**
* 執行緒需要處理的作業
*/
public void run() {
for (int index = 0; index < 2; index++){
try {
System.out.println(Thread.currentThread().getName()+"--"+count+"--"+index);
if("pool-1-thread-1".equals(Thread.currentThread().getName())){
//設定 一個異常 1%0 丟擲異常,檢查是否阻礙其他的執行緒執行
int k = 1%0;
Thread.sleep(2000);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}