Maison >Java >javaDidacticiel >Quelle est l'importance de la méthode Thread.onSpinWait() dans Java 9 ?

Quelle est l'importance de la méthode Thread.onSpinWait() dans Java 9 ?

王林
王林avant
2023-08-21 09:25:141043parcourir

La méthode

Java 9中Thread.onSpinWait()方法的重要性是什么?

Thread.onSpinWait() a été introduite dans Java 9. Il s'agit d'une méthode statique de la classe Thread qui peut éventuellement être appelée dans une boucle d'attente occupée. Il permet à la JVM d'émettre des instructions de processeur sur certaines architectures système afin d'améliorer le temps de réponse de ces boucles d'attente de rotation et de réduire la consommation électrique des threads principaux. Il peut améliorer la consommation d'énergie globale des programmes Java et permettre à d'autres threads principaux de s'exécuter plus rapidement dans la même plage de consommation d'énergie. La traduction chinoise de

Syntaxe

<strong>public static void onSpinWait()</strong>

Example

est :

Example

public class ThreadOnSpinWaitTest {
   public static void main(final String args[]) throws InterruptedException {
      final NormalTask task1 = new NormalTask();
      final SpinWaitTask task2 = new SpinWaitTask();
      final Thread thread1 = new Thread(task1);
      thread1.start();
      final Thread thread2 = new Thread(task2);
      thread2.start();
      new Thread(() -> {
         try {
            Thread.sleep(1000);
         } catch(final InterruptedException e) {
            e.printStackTrace();
         } finally {
            task1.start();
            task2.sta*rt();
         }
      }).start();
      thread1.join();
      thread2.join();
   }
   private <strong>abstract </strong>static class Task implements Runnable {
      volatile boolean canStart;
      void start() {
         this.canStart = true;
      }
   }
   private <strong>static </strong>class NormalTask extends Task {
      <strong>@Override</strong>
      public void run() {
         while(!this.canStart) {
         }
         System.out.println("Done!");
      }
   }
   private <strong>static </strong>class SpinWaitTask extends Task {
      <strong>@Override</strong>
      public void run() {
         while(!this.canStart) {
            Thread.<strong>onSpinWait()</strong>;
         }
         System.out.println("Done!");
      }
   }
}

Output

<strong>Done!
Done!</strong>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer