Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java 9でのThread.onSpinWait()メソッドの重要性?


Thread.onSpinWait() メソッドはJava9で導入されました。これは静的です スレッドの方法 クラスであり、オプションでビジーウェイトで呼び出すことができます ループします。これにより、JVMは一部のシステムアーキテクチャでプロセッサ命令を発行して、このようなスピン待機での反応時間を改善できます。 ループし、コアスレッドによって消費される電力も削減します。これは、Javaプログラムの全体的な電力消費にメリットをもたらし、他のコアスレッドが同じ電力消費エンベロープ内でより高速に実行できるようにします。

構文

public static void onSpinWait()

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 abstract static class Task implements Runnable {
      volatile boolean canStart;
      void start() {
         this.canStart = true;
      }
   }
   private static class NormalTask extends Task {
      @Override
      public void run() {
         while(!this.canStart) {
         }
         System.out.println("Done!");
      }
   }
   private static class SpinWaitTask extends Task {
      @Override
      public void run() {
         while(!this.canStart) {
            Thread.onSpinWait();
         }
         System.out.println("Done!");
      }
   }
}

出力

Done!
Done!

  1. Javaの同時実行性– yield()メソッド

    歩留まり関数 この関数は、実行に時間がかかりすぎて重要ではないスレッドではなく、より重要なスレッドが最初に実行されるようにします。 スレッドがjava.lang.Thread.yieldメソッドを呼び出すとき、それはスレッドスケジューラがその実行を一時停止することを示します。スレッドスケジューラは、この指示を受け入れるか無視するかを選択します。 スレッドが「yield」関数を実行する場合、スケジューラーは、同じかそれ以上の優先順位を持つスレッドが存在するかどうかを確認します。その場合、現在のスレッドは実行可能または準備完了状態に移行し、そのスレッドにはプロセッサリソースが与えられます。

  2. Java 9でのdestroyForcibly()メソッドの重要性?

    destroyForcibly() メソッドを使用してプロセスを強制終了できます 。プロセスが終了またはフリーズした場合に必要になります。たとえば、 isAlive() destroyForcibly()の後にメソッドはtrueを返します と呼ばれます。 destroyForcibly() メソッドは、終了が正常に要求された場合はtrueを返し、それ以外の場合はfalseを返します。 構文 boolean destroyForcibly() 以下の例では、メモ帳を起動できます。 アプリケーションであり、 destroyForcibly()の後に終了します メソッドが呼び出されました。 例