Trong lập trình đa luồng (multithreading) trong Java, Thread và Thread Pool là hai khái niệm quan trọng giúp quản lý và tối ưu hóa việc thực thi các tác vụ. Trong bài viết này, chúng ta sẽ khám phá cách sử dụng Thread và Thread Pool thông qua các ví dụ minh họa.
Thread trong Java
Thread trong Java là một luồng thực thi độc lập trong chương trình. Để tạo một Thread, bạn có thể mở rộng lớp Thread
và ghi đè phương thức run()
để xác định hành động của Thread.
public class MyThread extends Thread {
private String threadName;
public MyThread(String name) {
this.threadName = name;
}
public void run() {
System.out.println("Thread " + threadName + " is running.");
try {
Thread.sleep(2000); // Giả lập một tác vụ mất thời gian
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread " + threadName + " is completed.");
}
public static void main(String[] args) {
MyThread thread1 = new MyThread("Thread 1");
MyThread thread2 = new MyThread("Thread 2");
thread1.start();
thread2.start();
}
}
Trong ví dụ trên, chúng ta tạo hai đối tượng Thread và bắt đầu chúng bằng cách gọi phương thức start()
.
Thread Pool trong Java
Thread Pool là một tập hợp các luồng đã được tạo sẵn để thực hiện các tác vụ. Trong Java, chúng ta có thể sử dụng ExecutorService
và các lớp cung cấp bởi gói java.util.concurrent
để tạo và quản lý Thread Pool.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
// Tạo thread pool với kích thước là 3
ExecutorService executor = Executors.newFixedThreadPool(3);
// Submit các tác vụ cho thread pool
for (int i = 0; i < 5; i++) {
Runnable task = new MyTask("Task " + i);
executor.submit(task);
}
// Shutdown thread pool sau khi tất cả các tác vụ đã hoàn thành
executor.shutdown();
}
}
class MyTask implements Runnable {
private String taskName;
public MyTask(String name) {
this.taskName = name;
}
public void run() {
System.out.println("Task " + taskName + " is running.");
try {
Thread.sleep(2000); // Giả lập một tác vụ mất thời gian
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task " + taskName + " is completed.");
}
}
Trong ví dụ trên, chúng ta tạo một Thread Pool với kích thước là 3 và submit 5 tác vụ vào thread pool. Thread Pool sẽ tự động quản lý và phân công các tác vụ cho các luồng có sẵn trong pool.
Việc hiểu và sử dụng Thread và Thread Pool là một phần quan trọng giúp tối ưu hóa hiệu suất và tài nguyên của ứng dụng Java. Bằng cách sử dụng chúng một cách hiệu quả, bạn có thể tận dụng tối đa tiềm năng của hệ thống và cải thiện trải nghiệm người dùng.
Reference:
Finally Getting the Most out of the Java Thread Pool – Stackify
One Reply to “Tìm hiểu Thread và Thread pool trong Java phần 3”