Hàm yield
Hàm cố gắng đảm bảo luồng quan trọng hơn chạy trước thay vì luồng tốn nhiều thời gian thực thi và không quan trọng.
Khi thread gọi java.lang.Thread.yield, đó là chỉ thị cho thread scheduler tạm dừng thực thi. Scheduler chọn chấp nhận hoặc bỏ qua chỉ thị này.
Nếu thread thực thi yield, scheduler kiểm tra xem có thread cùng hoặc độ ưu tiên cao hơn không. Nếu có, thread hiện tại chuyển sang trạng thái runnable/ready và thread kia được cấp tài nguyên xử lý.
Cú pháp yield
public static native void yield()
Hãy xem ví dụ:
Ví dụ
import java.lang.*;
class Demo extends Thread{
public void run(){
for (int i = 0; i < 3; i++)
System.out.println("Đang kiểm soát bởi " + Thread.currentThread().getName() + " thread");
}
}
public class Demo_one{
public static void main(String[] args){
Demo my_obj = new Demo();
my_obj.start();
for (int i = 0; i < 3; i++){
Thread.yield();
System.out.println("Đang kiểm soát bởi " + Thread.currentThread().getName() + " thread");
}
}
}
Kết quả
Đang kiểm soát bởi main thread Đang kiểm soát bởi main thread Đang kiểm soát bởi main thread Đang kiểm soát bởi Thread-0 thread Đang kiểm soát bởi Thread-0 thread Đang kiểm soát bởi Thread-0 thread
Lớp Demo extends Thread. Hàm run duyệt tập phần tử, lấy tên thread bằng getName. Lớp Demo_one định nghĩa main tạo instance mới, bắt đầu bằng start. Phần tử duyệt và yield gọi trên thread.
- Sau khi thread hoàn thành thực thi bằng yield, nhiều thread cạnh tranh tài nguyên. Không cách nào chỉ định thread nào chạy trước.
- Khi thread thực thi yield, nó chuyển từ Running sang Runnable state.
- Yield chỉ dùng được nếu nền tảng hỗ trợ pre-emptive scheduling.
- Khi thread tạm dừng, không cách nào đảm bảo nó sẽ có cơ hội sớm hay muộn, tùy thuật toán lập lịch và thread scheduler.