JavaRush /Java Blog /Random-JA /コーヒーブレイク#159。Java のスレッドのライフサイクル。Java 8 の関数インターフェースとデフォルトの...

コーヒーブレイク#159。Java のスレッドのライフサイクル。Java 8 の関数インターフェースとデフォルトのメソッド

Random-JA グループに公開済み

Java のスレッドのライフサイクル

出典: Medium この記事では、Java のスレッドのさまざまなライフサイクル状態について説明します。 コーヒーブレイク#159。 Java のスレッドのライフサイクル。 Java 8 の関数インターフェイスとデフォルトのメソッド - 1Java のスレッドのライフサイクルは主に、スレッドの誕生から始まりスレッドの終了までのさまざまな状態への遷移で構成されます。スレッドが作成され、Threadクラスのstart()メソッドを呼び出して開始されると、スレッドを実行する準備が整います。Thread クラスのsleep()メソッドまたはwait()メソッドが呼び出されると、スレッドは使用できなくなります。プログラムでスレッドを管理するには、スレッドの状態を識別することが重要です。Java スレッドのライフサイクルがその状態をどのように決定するかを理解しましょう。これについて Java ドキュメントには次のように記載されています: スレッドは、ライフサイクル中に 5 つの状態のいずれかに入ることができるプログラム実行パスです。
  1. 新しい
  2. 実行可能
  3. ランニング
  4. ブロックされました
  5. 死んだ
1. Thread クラスで Thread オブジェクトを作成すると、New (新生児状態)が発生します。フローが作成され、「生まれたばかり」の状態になります。つまり、スレッドが作成されると、スレッドは新しい状態に入りますが、インスタンスでは start()メソッドがまだ呼び出されていません。2. 実行可能。この状態は、スレッドを実行する準備ができていることを意味します。新しいスレッドでstart()メソッドが呼び出されると、開始の準備が整います。この状態では、スレッドはプロセッサが使用可能になるまで (CPU 時間) 待機します。つまり、スレッドは実行を待つスレッドのキュー (一連) になります。 3. 実行中 (実行状態)。実行中とは、プロセッサがスレッドを実行するためのタイムスロットを割り当てたことを意味します。これは、スレッドが実際の機能を実行する状態です。 4. ブロック済み (ブロック状態)。スレッドが一時停止、スリープ、または特定の条件を満たすためにしばらく待機しているとき、スレッドはブロック状態になります。 5. デッドステート。この状態は、run()メソッドが命令の実行を終了したときに発生します。スレッドは自動的に停止するか、デッド状態になります。つまり、スレッドがrun()メソッドを終了すると、スレッドは終了するか、停止します。

Java 8 の関数インターフェースとデフォルトのメソッド

出典: Medium この記事では、Java 8 で導入されたいくつかの変更、つまり関数インターフェースとデフォルトのメソッドについて学びます。

デフォルトのメソッドとは何ですか?

抽象クラスには抽象メソッドと非抽象メソッド (実装されたメソッド) を含めることができますが、インターフェイスは 100% 抽象です (これらのメソッドはすべてシグネチャのみを持ち、実装はありません)。しかし、クラスではなくインターフェイスが必要で、実装されているすべてのクラスに共通の機能が必要な場合はどうなるでしょうか? なぜなら、インターフェースを実装する各クラスで実装コードが何度も繰り返されるからです。これを回避するために、Java 8 ではデフォルトのキーワードが追加されました。インターフェイスに実装されたメソッドがある場合は、そのメソッドにデフォルトのキーワードを割り当てる必要があります。割り当てないと、実行時エラーが発生します。

関数型インターフェースとは何ですか?

関数型インターフェイスは、1 つの抽象メソッドと任意の数の標準メソッドまたは静的メソッドを備えたインターフェイスにすぎません。関数型インターフェイスの例は Comparable で、これには 1 つの抽象メソッドCompareTo()があります。また、Runnable にはrun()メソッドなどがあります。@FunctionalInterface アノテーションを使用して関数インターフェイスを表すこともできます。これにより、インターフェイスには抽象メソッドが 1 つだけ存在することが保証されます。
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //Имплементация
    }
   public default void method2(){
       //Имплементация
    }
}

機能インターフェイスの種類

Consumer - 引数を 1 つ受け取り、何も返しません。
  • Consumer の 3 つのバリアントは、DoubleConsumer、IntConsumer、LongConsumer です (受け入れる引数のタイプに応じて異なります)。
  • Bi-Consumer - 2 つの引数を受け取り、何も返しません。
述語- 引数を 1 つ受け取り、ブール値を返します。
  • Predicate の 3 つのバリアントは、DoublePredicate、IntPredicate、LongPredicate です (受け入れる引数のタイプに応じて異なります)。
  • Bi-Predicate - 2 つの引数を受け取り、ブール値を返します。
関数- 引数を 1 つ受け取り、値を 1 つ返します。
  • 関数の多くのバージョンが引数の型として利用でき、intlongdoubleが最も一般的に使用されます。
  • Bi-Function - 2 つの引数を受け取り、1 つの値を返します。
  • 単項演算子と二項演算子はそれぞれ関数と二関数を実装しますが、ここでの追加条件は、入力と出力が同一で同じ型である必要があることです。
サプライヤー- 入力は受け付けませんが、単一の値を返します。Supplier のさまざまなバージョン: BooleanSupplier、IntSupplier、LongSupplier、DoubleSupplier。戻り値の型は対応するプリミティブです。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION