如何利用線程實(shí)現(xiàn)并行
在Java開(kāi)發(fā)中,線程池是非常重要的工具,可以實(shí)現(xiàn)線程的并行執(zhí)行。本文將探討線程池的使用,主要介紹可緩存線程池、定長(zhǎng)線程池、支持定時(shí)及周期性任務(wù)執(zhí)行的線程池以及單線程化的線程池??删彺婢€程池第一步是創(chuàng)
在Java開(kāi)發(fā)中,線程池是非常重要的工具,可以實(shí)現(xiàn)線程的并行執(zhí)行。本文將探討線程池的使用,主要介紹可緩存線程池、定長(zhǎng)線程池、支持定時(shí)及周期性任務(wù)執(zhí)行的線程池以及單線程化的線程池。
可緩存線程池
第一步是創(chuàng)建一個(gè)可緩存線程池,通過(guò)以下代碼創(chuàng)建10個(gè)線程,并依次輸出線程的序號(hào):
```java
ExecutorService executor ();
for (int i 0; i < 10; i ) {
final int threadNum i;
executor.execute(() -> {
("Thread: " threadNum);
});
}
();
```
定長(zhǎng)線程池
第二步是創(chuàng)建一個(gè)固定長(zhǎng)度的線程池,通過(guò)以下代碼指定長(zhǎng)度為3,在程序啟動(dòng)后會(huì)依次創(chuàng)建3個(gè)線程:
```java
ExecutorService executor (3);
for (int i 0; i < 3; i ) {
final int threadNum i;
executor.execute(() -> {
("Thread: " threadNum);
});
}
();
```
定時(shí)及周期性任務(wù)執(zhí)行的線程池
第三步是創(chuàng)建一個(gè)定時(shí)及周期性任務(wù)執(zhí)行的線程池。下面是延遲執(zhí)行示例代碼:
```java
ScheduledExecutorService executor (1);
(() -> {
("Delayed task");
}, 5, );
();
```
定時(shí)周期性任務(wù)的線程池
第四步是創(chuàng)建一個(gè)定時(shí)周期性任務(wù)執(zhí)行的線程池。下面的代碼塊將延遲1秒后,每3秒執(zhí)行一次:
```java
ScheduledExecutorService executor (1);
(() -> {
("Periodic task");
}, 1, 3, );
();
```
單線程化的線程池
第五步是創(chuàng)建一個(gè)單線程化的線程池,它只會(huì)用唯一的工作線程來(lái)執(zhí)行任務(wù)。代碼如下所示:
```java
ExecutorService executor ();
for (int i 0; i < 5; i ) {
final int threadNum i;
executor.execute(() -> {
("Thread: " threadNum);
});
}
();
```
通過(guò)以上的介紹與示例代碼,我們可以靈活地利用不同類(lèi)型的線程池實(shí)現(xiàn)并行執(zhí)行任務(wù),提高程序的運(yùn)行效率和性能。