Java線程池的使用:了解創(chuàng)建線程的方式
在Java中,線程是一個非常重要的概念。但是,在大量的創(chuàng)建線程時,會過度消耗計算機資源。因此,針對比較簡單的任務(wù),可以采用線程池的方式限制過度創(chuàng)建線程,從而提高程序的運行效率。Java中提供了許多不同
在Java中,線程是一個非常重要的概念。但是,在大量的創(chuàng)建線程時,會過度消耗計算機資源。因此,針對比較簡單的任務(wù),可以采用線程池的方式限制過度創(chuàng)建線程,從而提高程序的運行效率。Java中提供了許多不同類型的線程池構(gòu)造類,下面將依次介紹。
一、newFixedThreadPool:創(chuàng)建一個固定線程數(shù)的線程池
使用示例代碼:
```
package testexecutor;
import ;
import ;
public class TestExecutor {
public static void main(String[] args) {
ExecutorService fixThreadPool(5);
for(int i1;i<5;i ){
final int taski;
fixThreadPool.execute(new Runnable(){
@Override
public void run(){
for(int j1;j<5;j ){
(().getName() " task:" task " times:" j);
}
}
});
}
();
}
}
```
這段代碼創(chuàng)建了一個包含五個線程的線程池,并為線程分配任務(wù)。由于當(dāng)所有線程都處于忙碌狀態(tài)時,新的任務(wù)將被放入隊列中等待。直到有線程空閑時,才會被取出執(zhí)行。
二、newCachedThreadPool:創(chuàng)建一個可緩存線程池
使用示例代碼:
```
package testexecutor;
import ;
import ;
public class TestExecutor {
public static void main(String[] args) {
ExecutorService cachedThreadPool();
for(int i1;i<100;i ){
final int taski;
cachedThreadPool.execute(new Runnable(){
@Override
public void run(){
for(int j1;j<5;j ){
(().getName() " task:" task " times:" j);
}
}
});
}
();
}
}
```
這段代碼創(chuàng)建了一個可緩存的線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。在這個例子中,創(chuàng)建了100個任務(wù),但是由于任務(wù)結(jié)束后,線程可以被回收再利用,因此這里只創(chuàng)建了20個線程來執(zhí)行這些任務(wù)。
三、newScheduledThreadPool:創(chuàng)建一個定長線程池
使用示例代碼:
```
import ;
import ;
import ;
public class TestThreads {
public static void main(String[] args) {
ScheduledExecutorService scheduledThreadPool (5);
(new Runnable() {
public void run() {
("delay 10 seconds");
}
}, 10, );
();
}
}
```
這段代碼創(chuàng)建了一個定長線程池,支持定時及周期性任務(wù)執(zhí)行。在這個例子中,創(chuàng)建了一個延遲10秒后執(zhí)行的線程。
四、newSingleThreadExecutor:創(chuàng)建一個單線程化的線程池
使用示例代碼:
```
package testexecutor;
import ;
import ;
public class TestExecutor {
public static void main(String[] args) {
ExecutorService singleThreadExecutor ();
for (int i 0; i < 10; i ) {
final int index i;
singleThreadExecutor.execute(new Runnable() {
public void run() {
try {
(().getName() " task" index);
(200);
} catch (InterruptedException e) {
();
}
}
});
}
();
}
}
```
這段代碼創(chuàng)建了一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(FIFO、LIFO、優(yōu)先級)執(zhí)行。
五、總結(jié)
以上就是Java線程池的四種常用構(gòu)造類的使用方法和相關(guān)示例代碼。在實際開發(fā)中,我們可以根據(jù)任務(wù)特點,選擇合適的線程池來提高程序的運行效率,減小計算機資源的浪費。