ThreadPoolTest

/**
 * 線程池
 * 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();
}
}
});
}
}

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