Mức độ ưu tiên và lập lịch cho các luồng

Một phần của tài liệu Bài giảng Ngôn ngữ lập trình Java: Phần 2 - TS. Vũ Hữu Tiến (Trang 31 - 33)

Khác với hệ thống có nhiều bộ vi xử lý có thể thực thi các luồng đồng thời về mặt vật lý, đối với hệ thống đơn xử lý chỉ có thể xử lý các luồng đồng thời về mặt logic. Điều này có nghĩa là các luồng chia sẻ thời gian thực hiện với nhau dựa trên tính khả dụng của bộ vi xử lý trong hệ thống. Để giải quyết vấn đề này một cách đồng bộ, Java phải thực hiện lập lịch để thực thi các luồng (scheduling) và thiết lập mức độ ưu tiên (priority) cho các luồng. Mức độ ưu tiên của luồng có thể được gán khi tạo luồng. Luồng ưu tiên cao nhất tiếp tục chạy cho đến khi nó chuyển sang trạng thái không thể chạy được (non – runnable) hoặc giảm mức độ ưu tiên hoặc khi một luồng có mức độ ưu tiên cao hơn được thực thi.

Mức độ ưu tiên của luồng là một giá trị số nguyên giữa MIN_PRIORITY và MAX_PRIORITY. Các hằng số này được định nghĩa trong lớp Thread. Trong Java 1.0, MIN_PRIORITY là 1 và MAX_PRIORITY là 10. Mức ưu tiên của luồng được đặt khi

97 nó được tạo. Nó được đặt ở mức ưu tiên giống như luồng đã tạo ra nó. Mức ưu tiên mặc định của một luồng là NORM_PRIORITY và bằng 5. Mức độ ưu tiên của một luồng có thể được thay đổi bằng phương thức setPriority().

Cách tiếp cận lập lịch của Java được gọi là lập lịch ưu tiên. Khi một luồng có mức độ ưu tiên cao hơn có thể chạy được, nó sẽ xử lý các luồng có mức độ ưu tiên thấp hơn và ngay lập tức được thực hiện tại vị trí của chúng. Nếu hai hoặc nhiều luồng ưu tiên cao hơn trở nên có thể chạy được, bộ lập lịch Java sẽ thực thi các luồng đan xen.

Ví dụ :

package prioritydemo;

import java.util.logging.Level; import java.util.logging.Logger; public class PriorityDemo {

public static void main(String[] args) { Priority t1 = new Priority();

t1.start();

Priority t2 = new Priority(); t2.start();

Priority t3 = new Priority(); t3.start();

} }

class Priority extends Thread{ int sleep;

static int prio = 3; public Priority(){ sleep += 500; prio++;

setPriority(prio); }

public void run(){ try {

Thread.sleep(sleep);

System.out.println("Name: " + getName() + " Priority: " + getPriority());

} catch (InterruptedException ex) { } } } Kết quả:

Name: Thread-2 Priority: 6 Name: Thread-1 Priority: 5 Name: Thread-0 Priority: 4

98

Một phần của tài liệu Bài giảng Ngôn ngữ lập trình Java: Phần 2 - TS. Vũ Hữu Tiến (Trang 31 - 33)

Tải bản đầy đủ (PDF)

(65 trang)