Java - Mức Ưu Tiên Thread

Xin chào các nhà phát triển Java tương lai! Hôm nay, chúng ta sẽ bước vào thế giới thú vị về mức ưu tiên thread trong Java. Hãy cùng nhau cất cánh, vì chúng ta sẽ bắt đầu hành trình mà sẽ biến bạn từ người mới bắt đầu với Java thành chuyên gia về mức ưu tiên thread!

Java - Thread Priority

Mức Ưu Tiên Thread Là Gì?

Trước khi bước vào chi tiết, hãy bắt đầu với những khái niệm cơ bản. Hãy tưởng tượng bạn là một đầu bếp trong một nhà bếp rất buồn ( đó là chương trình Java của chúng ta), và bạn có nhiều nhiệm vụ (là các thread của chúng ta) cần hoàn thành. Một số nhiệm vụ c紧 quan trọng hơn những nhiệm vụ khác, phải không? Đó chính là điều gì mức ưu tiên thread trong Java - nó là cách để nói với Máy Tính Ảo Java (JVM) những thread nào là quan trọng hơn và nên được chú ý hơn.

Mức Độ Ưu Tiên

Trong Java, mức ưu tiên thread được đại diện bởi các số từ 1 đến 10:

  • 1 là mức ưu tiên thấp nhất
  • 5 là mức ưu tiên bình thường (mặc định)
  • 10 là mức ưu tiên cao nhất

Hãy tưởng tượng nó như danh sách VIP trong một câu lạc bộ sang trọng. Số cao hơn, thread đó được coi là quan trọng hơn.

Các Hằng Số Tính Năng Của Lớp Thread

Java cung cấp một số hằng số tiện ích cho các mức ưu tiên phổ biến. Hãy xem xét:

Hằng Số Giá Trị Mô Tả
Thread.MIN_PRIORITY 1 Mức ưu tiên thấp nhất
Thread.NORM_PRIORITY 5 Mức ưu tiên bình thường
Thread.MAX_PRIORITY 10 Mức ưu tiên cao nhất

Sử dụng các hằng số này làm cho mã của bạn dễ đọc hơn. Nó như sử dụng "VIP", "Thường", và "Economy" thay vì các số trên danh sách khách của bạn.

Phương Thức Đặt và Lấy Mức Ưu Tiên Thread

Bây giờ, hãy tìm hiểu cách đặt và lấy mức ưu tiên thread:

Đặt Mức Ưu Tiên Thread

Để đặt mức ưu tiên của một thread, chúng ta sử dụng phương thức setPriority():

thread.setPriority(Thread.MAX_PRIORITY);

Lấy Mức Ưu Tiên Thread

Để kiểm tra mức ưu tiên hiện tại của một thread, chúng ta sử dụng phương thức getPriority():

int priority = thread.getPriority();

Ví Dụ Về Mức Ưu Tiên Thread Trong Java

Hãy đặt kiến thức này vào thực hành với một ví dụ đơn giản:

public class PriorityDemo {
public static void main(String[] args) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Thread 1: " + i);
}
});

Thread t2 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
System.out.println("Thread 2: " + i);
}
});

// Đặt mức ưu tiên
t1.setPriority(Thread.MIN_PRIORITY);
t2.setPriority(Thread.MAX_PRIORITY);

// Khởi động các thread
t1.start();
t2.start();
}
}

Trong ví dụ này, chúng ta tạo hai thread. Thread 1 được đặt ưu tiên thấp nhất, trong khi Thread 2 nhận được ưu tiên cao nhất. Khi chạy chương trình này, bạn sẽ thường thấy Thread 2 hoàn thành nhiệm vụ trước Thread 1, mặc dù bắt đầu sau.

Nhưng nhớ rằng, lịch trình thread có thể bị ảnh hưởng bởi các yếu tố ngoài chỉ ưu tiên, vì vậy kết quả có thể không luôn như mong đợi. Nó như đưa vé VIP cho bạn bè - họ có xu hướng vào trước, nhưng không được đảm bảo!

Thêm Ví Dụ Về Mức Ưu Tiên Thread

Hãy khám phá một ví dụ phức tạp hơn để thực sự đóng vai trò hiểu biết của chúng ta:

public class PriorityExample implements Runnable {
private String threadName;

public PriorityExample(String name) {
this.threadName = name;
}

public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(threadName + " với mức ưu tiên " +
Thread.currentThread().getPriority() +
" đang chạy");
try {
Thread.sleep(1000); // ngủ 1 giây
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
Thread t1 = new Thread(new PriorityExample("Thread Ưu Tiên Thấp"));
Thread t2 = new Thread(new PriorityExample("Thread Ưu Tiên Bình Thường"));
Thread t3 = new Thread(new PriorityExample("Thread Ưu Tiên Cao"));

t1.setPriority(Thread.MIN_PRIORITY);
// Mức ưu tiên của t2 là mặc định, vì vậy chúng ta không cần đặt nó
t3.setPriority(Thread.MAX_PRIORITY);

t1.start();
t2.start();
t3.start();
}
}

Trong ví dụ này, chúng ta tạo ba thread với mức ưu tiên khác nhau. Mỗi thread in tên và mức ưu tiên của mình ba lần, với một giây ngủ giữa mỗi lần in.

Khi bạn chạy chương trình này, bạn có thể thấy đầu ra như sau:

Thread Ưu Tiên Cao với mức ưu tiên 10 đang chạy
Thread Ưu Tiên Bình Thường với mức ưu tiên 5 đang chạy
Thread Ưu Tiên Thấp với mức ưu tiên 1 đang chạy
Thread Ưu Tiên Cao với mức ưu tiên 10 đang chạy
Thread Ưu Tiên Bình Thường với mức ưu tiên 5 đang chạy
Thread Ưu Tiên Thấp với mức ưu tiên 1 đang chạy
Thread Ưu Tiên Cao với mức ưu tiên 10 đang chạy
Thread Ưu Tiên Bình Thường với mức ưu tiên 5 đang chạy
Thread Ưu Tiên Thấp với mức ưu tiên 1 đang chạy

Nhận ra rằng thread ưu tiên cao có xu hướng chạy trước, sau đó là thread ưu tiên bình thường, và cuối cùng là thread ưu tiên thấp. Tuy nhiên, thứ tự chính xác có thể thay đổi do các yếu tố như tải hệ thống và chi tiết của việc thực hiện JVM.

Kết Luận

Và thế là xong, các bạn! Bạn vừa nâng cấp kỹ năng Java của mình bằng cách khám phá mức ưu tiên thread. Nhớ rằng, mặc dù mức ưu tiên thread là một công cụ hữu ích, chúng không phải là một cây lau động. JVM cuối cùng quyết định cách lịch trình thread, và ưu tiên chỉ là một trong nhiều yếu tố mà nó xem xét.

Sử dụng mức ưu tiên một cách khôn ngoan, và các chương trình Java của bạn sẽ chạy mượt mà hơn bất kỳ máy móc nào!

Hãy tiếp tục lập trình, tiếp tục học hỏi, và nhớ rằng - trong thế giới của Java, mỗi thread đều có giá trị!

Credits: Image by storyset