线程池2--创建线程
一.
1.java四中線程池的使用
java通過Excutors提供四種線程池,分別為:
newCacheThreadPool():創建一個可緩存的線程池,如果線程池大小超過處理需要,可靈活回收空閑線程,若無空閑線程,則新建線程。
newFixedThreadPool():創建一個定長的線程池,可控制線程最大并發數,超出的線程會在隊列中排隊。
newScheduledThreadPool():創建一個定長線程池,支持定時及周期性任務執行。
newSingleThreadExecutor():創建一個單線程化的線程池,它只會用唯一的工作線程來執行任務,保證所有的任務按照制定的順序(FIFO,LIFO,優先級)執行。
?
二.
public static void main(String[] args) {
// 1.線程池為無限大,當執行第二個任務時第一個任務已經完成,會復用執行第一個任務的線程,而不用每次新建線程。
//
// ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
//
// for (int i = 0; i < 10; i++) {
//
// final int index = i;
//
// try {
// Thread.sleep(index * 100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
//
// cachedThreadPool.execute(new Runnable() {
//
// @Override
// public void run() {
// System.out.println(index);
// System.out.println(cachedThreadPool);
// }
//
// });
// }
?
/**
* 2.指定線程池的大小,如果指定線程池大小為5,而請求總數為100,那么前五個的順序一般會是亂的,因為第一次進入線程池的有五個值,池中的五個線程拿到哪個執行哪個,之后
* 哪個線程執行完則繼續按隊列的順序去抓取任務,所以前面的一般是亂的,后面基本會按順序輸入---線程池大小為100,任務有100,后面的基本還在后面,前面的還在前面,因為
* 線程的抓取是按順序去隨機抓取的
*/
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
final int index = i;
fixedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
// 3.1定時執行 先睡一秒,之后的睡三秒 scheduleAtFixedRate
// ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
// scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
//
// @Override
// public void run() {
//
// System.out.println("delay 3 seconds");
//
// }
// }, 1, 3, TimeUnit.SECONDS);
3.2--睡三秒后執行 schedule
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
public void run() {
System.out.println("delay 3 seconds");
}
}, 3, TimeUnit.SECONDS);
}
//4.創建單線程
// ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
// for (int i = 0; i < 10; i++) {
// final int index = i;
// singleThreadExecutor.execute(new Runnable() {
//
// @Override
// public void run() {
// try {
// System.out.println(index);
// Thread.sleep(2000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
// });
// }
?
轉載于:https://www.cnblogs.com/tian666/p/7845282.html
總結
以上是生活随笔為你收集整理的线程池2--创建线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maven + bat 实现快速编译打包
- 下一篇: BellmanFord的队列优化