Lớp ThreadPoolExecutor
java. Nó cũng cung cấp các phương pháp tiện ích khác nhau để kiểm tra số liệu thống kê chủ đề hiện tại và kiểm soát chúng.
Phương thức ThreadPoolExecutor
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | protected void afterExecute(Runnable r, Throwable t) Phương thức được gọi sau khi hoàn thành việc thực thi Runnable đã cho. |
2 | void allowCoreThreadTimeOut(boolean value) Đặt chính sách điều chỉnh liệu các luồng lõi có thể hết thời gian chờ và kết thúc nếu không có tác vụ nào đến trong thời gian duy trì, được thay thế nếu cần khi tác vụ mới đến. |
3 | boolean allowsCoreThreadTimeOut() Trả về true nếu nhóm này cho phép các luồng lõi hết thời gian chờ và kết thúc nếu không có tác vụ nào đến trong thời gian keepAlive, được thay thế nếu cần khi có tác vụ mới. |
4 | boolean awaitTermination(long timeout, TimeUnit unit) Chặn cho đến khi tất cả các tác vụ đã hoàn thành thực thi sau khi yêu cầu tắt máy hoặc hết thời gian chờ xảy ra hoặc luồng hiện tại bị gián đoạn, tùy điều kiện nào xảy ra trước. |
5 | protected void beforeExecute(Thread t, Runnable r) Phương thức được gọi trước khi thực thi Runnable đã cho trong luồng đã cho. |
6 | void execute(Runnable command) Thực thi nhiệm vụ đã cho vào một lúc nào đó trong tương lai. |
7 | protected void finalize() Gọi tắt khi trình thực thi này không còn được tham chiếu và nó không có luồng. |
số 8 | int getActiveCount() Trả về số luồng gần đúng đang thực thi tác vụ. |
9 | long getCompletedTaskCount() Trả về tổng số tác vụ gần đúng đã hoàn thành việc thực thi. |
10 | int getCorePoolSize() Trả về số chủ đề cốt lõi. |
11 | long getKeepAliveTime(TimeUnit unit) Trả về thời gian tồn tại của luồng, là khoảng thời gian mà các luồng vượt quá kích thước nhóm lõi có thể không hoạt động trước khi kết thúc. |
12 | int getLargestPoolSize() Trả về số luồng lớn nhất đã từng có trong nhóm. |
13 | int getMaximumPoolSize() Trả về số luồng tối đa cho phép. |
14 | int getPoolSize() Trả về số luồng hiện tại trong nhóm. |
15 | BlockingQueue
Trả về hàng đợi tác vụ được sử dụng bởi trình thực thi này. |
15 | RejectedExecutionHandler getRejectedExecutionHandler() Trả về trình xử lý hiện tại cho các tác vụ không thể thực thi. |
16 | long getTaskCount() Trả về tổng số công việc gần đúng đã từng được lên lịch thực hiện. |
17 | ThreadFactory getThreadFactory() Trả về nhà máy luồng được sử dụng để tạo luồng mới. |
18 | boolean isShutdown() Trả về true nếu trình thực thi này đã bị tắt. |
19 | boolean isTerminated() Trả về true nếu tất cả các tác vụ đã hoàn thành sau khi tắt. |
20 | boolean isTerminating() Trả về true nếu trình thực thi này đang trong quá trình kết thúc sau khi shutdown () hoặc shutdownNow () nhưng chưa kết thúc hoàn toàn. |
21 | int prestartAllCoreThreads() Bắt đầu tất cả các luồng lõi, khiến chúng phải chờ đợi công việc. |
22 | boolean prestartCoreThread() Bắt đầu một chuỗi cốt lõi, khiến nó không hoạt động chờ đợi. |
23 | void purge() Cố gắng xóa khỏi hàng đợi công việc tất cả các nhiệm vụ trong Tương lai đã bị hủy bỏ. |
24 | boolean remove(Runnable task) Loại bỏ tác vụ này khỏi hàng đợi nội bộ của trình thực thi nếu nó hiện diện, do đó khiến nó không được chạy nếu nó chưa bắt đầu. |
25 | void setCorePoolSize(int corePoolSize) Đặt số lượng chủ đề cốt lõi. |
26 | void setKeepAliveTime(long time, TimeUnit unit) Đặt giới hạn thời gian mà các luồng có thể không hoạt động trước khi bị chấm dứt. |
27 | void setMaximumPoolSize(int maximumPoolSize) Đặt số lượng chủ đề tối đa cho phép. |
28 | void setRejectedExecutionHandler(RejectedExecutionHandler handler) Đặt một trình xử lý mới cho các tác vụ không thể thực thi. |
29 | void setThreadFactory(ThreadFactory threadFactory) Đặt nhà máy sản xuất luồng được sử dụng để tạo luồng mới. |
30 | void shutdown() Bắt đầu tắt theo thứ tự trong đó các nhiệm vụ đã gửi trước đó được thực thi, nhưng không có nhiệm vụ mới nào được chấp nhận. |
31 | List<Runnable> shutdownNow() Cố gắng dừng tất cả các tác vụ đang thực thi, tạm dừng xử lý các tác vụ đang chờ và trả về danh sách các tác vụ đang chờ thực thi. |
32 | protected void terminated() Phương thức được gọi khi Người thực thi đã kết thúc. |
33 | String toString() Trả về một chuỗi xác định nhóm này, cũng như trạng thái của nó, bao gồm các chỉ báo về trạng thái chạy và số lượng công nhân và tác vụ ước tính. |
Thí dụ
Chương trình TestThread sau đây cho thấy cách sử dụng giao diện ThreadPoolExecutor trong môi trường dựa trên luồng.
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class TestThread {
public static void main(final String[] arguments) throws InterruptedException {
ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newCachedThreadPool();
//Stats before tasks execution
System.out.println("Largest executions: "
+ executor.getLargestPoolSize());
System.out.println("Maximum allowed threads: "
+ executor.getMaximumPoolSize());
System.out.println("Current threads in pool: "
+ executor.getPoolSize());
System.out.println("Currently executing threads: "
+ executor.getActiveCount());
System.out.println("Total number of threads(ever scheduled): "
+ executor.getTaskCount());
executor.submit(new Task());
executor.submit(new Task());
//Stats after tasks execution
System.out.println("Core threads: " + executor.getCorePoolSize());
System.out.println("Largest executions: "
+ executor.getLargestPoolSize());
System.out.println("Maximum allowed threads: "
+ executor.getMaximumPoolSize());
System.out.println("Current threads in pool: "
+ executor.getPoolSize());
System.out.println("Currently executing threads: "
+ executor.getActiveCount());
System.out.println("Total number of threads(ever scheduled): "
+ executor.getTaskCount());
executor.shutdown();
}
static class Task implements Runnable {
public void run() {
try {
Long duration = (long) (Math.random() * 5);
System.out.println("Running Task! Thread Name: " +
Thread.currentThread().getName());
TimeUnit.SECONDS.sleep(duration);
System.out.println("Task Completed! Thread Name: " +
Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Điều này sẽ tạo ra kết quả sau.
Đầu ra
Largest executions: 0
Maximum allowed threads: 2147483647
Current threads in pool: 0
Currently executing threads: 0
Total number of threads(ever scheduled): 0
Core threads: 0
Largest executions: 2
Maximum allowed threads: 2147483647
Current threads in pool: 2
Currently executing threads: 2
Total number of threads(ever scheduled): 2
Running Task! Thread Name: pool-1-thread-2
Running Task! Thread Name: pool-1-thread-1
Task Completed! Thread Name: pool-1-thread-1
Task Completed! Thread Name: pool-1-thread-2