Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java Concurrency – วิธีผลตอบแทน ()


ฟังก์ชันผลตอบแทน

ฟังก์ชันพยายามทำให้แน่ใจว่าเธรดที่มีความสำคัญมากกว่ารันก่อน แทนที่จะเป็นเธรดที่ใช้เวลามากเกินไปในการดำเนินการ และไม่สำคัญเช่นกัน

เมื่อเธรดเรียกใช้เมธอด 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

  • วิธีผลตอบแทนจะใช้ได้ก็ต่อเมื่อแพลตฟอร์มรองรับการตั้งเวลาล่วงหน้าเท่านั้น

  • เมื่อเธรดหยุดชั่วคราวระหว่างการดำเนินการ ไม่มีทางใดที่จะรับประกันได้ว่าจะได้รับโอกาสไม่ช้าก็เร็ว ทั้งหมดขึ้นอยู่กับอัลกอริธึมการจัดกำหนดการและตัวกำหนดเวลาเธรด