thể trùng lặp:
Are Thread.sleep(0) and Thread.yield() statements equivalent?Sự khác nhau giữa Thread.yield() và Thread.sleep (0) trong Java là gì?
Trong hiểu biết của tôi, cả hai Thread.yield() và Thread.sleep (0) nên làm cho rejudge CPU mà thread để chạy bởi một số thuật toán lập lịch trình .
Sự khác biệt là:
Thread.yield() là để cung cấp cho các cơ hội điều hành cho chủ đề khác, nhưng Thread.sleep (0) sẽ không, nó sẽ chỉ nói với CPU mà bạn nên sắp xếp lại các chuỗi điều hành bao gồm cả chuỗi hiện tại.
Thread.yield() chỉ là một lời khuyên có nghĩa là nó có thể không được chấp nhận, nhưng Thread.sleep (0) sẽ thực hiện sắp xếp lại một cách bắt buộc.
Hai kết luận trên có đúng không?
Vì những phương pháp này rất phụ thuộc vào việc triển khai thực hiện nên rất khó để nói. Bạn không nên dựa vào hành vi của các phương pháp này. ví dụ nếu bạn có một vòng lặp mà chỉ Thread.yield() nó sẽ không từ bỏ CPU 99% + thời gian. Thread.sleep (0) có thể ngủ từ 0,5 đến 2 ms tùy thuộc vào hệ điều hành, từ bỏ CPU, nhưng điều này cũng không phải là sự bảo đảm. –