/**
* 線程池
* 1:newCachedThreadPool:可緩存線程池,如果線程池長度超過處理需求,可靈活回收線程,如無可回收空間,則新建線程,線程池爲無限大
* 當執行地二個任務時第一個任務已經完成,可以複用第一個任務的線程,而不用每次新建線程
* 2:newFixedThreadPool:定長線程池,可控制線程最大併發數,超出的線程會在隊列中等待
* 3:newScheduledThreadPool:定長線程池,支持定時及週期性任務執行
* 4:newSingleThreadExcutor:創建一個單線程化線程,它只會用唯一的工作線程執行任務,保證所有任務按照順序執行
* @author Administrator
*
*/
public class ThreadPoolExcutorTest {
public static void main(String[] args) {
/* //可緩存線程池
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 0; i <10; i++) {
int index=i;
try {
Thread.sleep(index*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//執行線程
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.out.println(index);
}
});
}*/
//定長線程池,可控制線程的最大併發數,超出的線程會在隊列中等待,線程池最大長度爲3,睡眠2秒,每2秒打印三個數字
/* ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i <10; i++) {
int index=i;
//執行線程
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
System.err.println(index);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}*/
//定長線程池:支持定時及週期任務執行,延遲代碼執行
/*ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
for (int i = 0; i <10; i++) {
final int index=i;
//延遲執行任務
scheduledThreadPool.schedule(new Runnable() {
@Override
public void run() {
System.out.println(index);
}
}, 3, TimeUnit.SECONDS);
//定期執行任務
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.print(index+"\r\n");
}
}, 1, 3, TimeUnit.SECONDS);
}*/
//單線程化的線程池:它只會用唯一的工作線程來執行任務,保證所有任務按照指定順序執行
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 100; i++) {
final int index=i;
//執行任務
singleThreadExecutor.submit(new Runnable() {
@Override
public void run() {
System.out.println(index);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
}
}
ThreadPoolTest
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
棧的壓入和彈出測試(測試隊列)
/** * 測試隊列入棧和出棧順序 * @author Administrator * */ public class QueenTest
braincer
2020-07-03 14:17:02
【IDEA測試類】Could not find class解決原因
风聆Mia~
2020-05-23 09:54:51
解決Xcode引入第三方SDK找不到頭文件和_OBJC_CLASS_$_某文件名", referenced from:xx 問題
漫漫之间n
2020-02-24 17:37:57
JDK1.8新特性☞接口測試
braincer
2020-02-20 22:22:47
JDK8新特性☞訪問對象字段和靜態變量測試
braincer
2020-02-20 22:22:47
JDK8新特性☞接口Supplier||Consumer||Compator測試
braincer
2020-02-20 22:22:47
JDK1.8新特性測試☞排序
braincer
2020-02-20 22:22:47
JDK8新特性☞訪問局部變量測試
braincer
2020-02-20 22:22:47
JDK8新特性☞方法構造方法的引用
braincer
2020-02-20 22:22:47
JDK8新特性☞測試Predicate接口
braincer
2020-02-20 22:22:47
JDK1.8新特性☞函數式接口測試
braincer
2020-02-20 22:22:47
JDK8新特性☞Function測試
braincer
2020-02-20 22:22:47
JAVA編程練習 創建風扇對象(開關 風速等)
sonissa
2019-05-01 00:54:15