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

ความสำคัญของเมธอด Thread.onSpinWait() ใน Java 9

Thread.onSpinWait() เป็น static method ใหม่ใน Java 9 เรียกใน busy-waiting loops (spin-wait) ให้ JVM ออกคำสั่ง processor เพิ่มประสิทธิภาพ ลด power consumption

ประโยชน์

  • ปรับปรุง reaction time ใน spin-wait loops
  • ลด power consumption ของ core thread
  • ประโยชน์ต่อ power envelope รวมของโปรแกรม
  • core threads อื่นทำงานเร็วขึ้นใน power budget เดียวกัน

ไวยากรณ์

public static void onSpinWait()

ตัวอย่างเปรียบเทียบ

public class SpinWaitDemo {
    public static void main(String[] args) throws InterruptedException {
        NormalTask task1 = new NormalTask();
        SpinWaitTask task2 = new SpinWaitTask();
        
        Thread t1 = new Thread(task1);
        Thread t2 = new Thread(task2);
        t1.start(); t2.start();
        
        new Thread(() -> {
            try { Thread.sleep(1000); } 
            catch (InterruptedException e) { e.printStackTrace(); }
            finally { task1.start(); task2.start(); }
        }).start();
        
        t1.join(); t2.join();
    }
    
    abstract static class Task implements Runnable {
        volatile boolean canStart = false;
        void start() { canStart = true; }
    }
    
    static class NormalTask extends Task {
        public void run() {
            while (!canStart) { /* busy wait */ }
            System.out.println("NormalTask Done!");
        }
    }
    
    static class SpinWaitTask extends Task {
        public void run() {
            while (!canStart) { Thread.onSpinWait(); }
            System.out.println("SpinWaitTask Done!");
        }
    }
}

ผลลัพธ์

NormalTask Done!
SpinWaitTask Done!

SpinWaitTask ใช้ onSpinWait() จะมีประสิทธิภาพและประหยัดพลังงานกว่าในระหว่างรอ