ฟังก์ชันผลตอบแทน
ฟังก์ชันพยายามทำให้แน่ใจว่าเธรดที่มีความสำคัญมากกว่ารันก่อน แทนที่จะเป็นเธรดที่ใช้เวลามากเกินไปในการดำเนินการ และไม่สำคัญเช่นกัน
เมื่อเธรดเรียกใช้เมธอด java.lang.Thread.yield เป็นตัวบ่งชี้สำหรับตัวกำหนดเวลาเธรดเพื่อหยุดการทำงานชั่วคราว ตัวกำหนดตารางเวลาของเธรดเลือกที่จะยอมรับหรือละเว้นการบ่งชี้นี้
หากเธรดเรียกใช้ฟังก์ชัน 'yield' ตัวกำหนดตารางเวลาจะตรวจสอบเพื่อดูว่ามีเธรดที่มีลำดับความสำคัญเท่ากันหรือสูงกว่าหรือไม่ ถ้าเป็นเช่นนั้น เธรดปัจจุบันจะถูกย้ายไปยังสถานะที่รันได้หรือพร้อม และเธรดนั้นจะได้รับทรัพยากรตัวประมวลผล
ไวยากรณ์ของฟังก์ชันผลตอบแทน −
public static native void yield()
เรามาดูตัวอย่างกัน −
ตัวอย่าง
import java.lang.*; class Demo extends Thread{ public void run(){ for (int i=0; i<3 ; i++) System.out.println("In control of " + 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("In control of " + Thread.currentThread().getName() + " thread"); } } }
ผลลัพธ์
In control of main thread In control of main thread In control of main thread In control of Thread-0 thread In control of Thread-0 thread In control of Thread-0 thread
คลาสชื่อ Demo ขยายคลาสเธรด ในที่นี้ ฟังก์ชัน 'run' ถูกกำหนดให้วนซ้ำชุดขององค์ประกอบและรับชื่อของเธรดโดยใช้ฟังก์ชัน 'getName' คลาสที่ชื่อว่า 'Demo_one' กำหนดฟังก์ชันหลักที่สร้างอินสแตนซ์ใหม่และเริ่มใช้ฟังก์ชัน 'start' นอกจากนี้ ยังมีการวนซ้ำองค์ประกอบและฟังก์ชันผลตอบแทนถูกเรียกใช้บนเธรด
-
เมื่อเธรดดำเนินการเสร็จสิ้นโดยใช้วิธีผลตอบแทน มีหลายเธรดที่แข่งขันกันเพื่อแย่งชิงทรัพยากรตัวประมวลผล ไม่มีทางระบุได้ว่าเธรดใดที่จะดำเนินการก่อน
-
เมื่อเธรดดำเนินการตามวิธีผลตอบแทน เธรดจะเปลี่ยนจากสถานะกำลังทำงานเป็นสถานะ Runnable
-
วิธีผลตอบแทนจะใช้ได้ก็ต่อเมื่อแพลตฟอร์มรองรับการตั้งเวลาล่วงหน้าเท่านั้น
-
เมื่อเธรดหยุดชั่วคราวระหว่างการดำเนินการ ไม่มีทางใดที่จะรับประกันได้ว่าจะได้รับโอกาสไม่ช้าก็เร็ว ทั้งหมดขึ้นอยู่กับอัลกอริธึมการจัดกำหนดการและตัวกำหนดเวลาเธรด