プロセスには複数のスレッドを含めることができます。スレッドはプロセスのコンポーネントです。各スレッドは、それが属するプロセスに依存する必要があります。スレッドにはプライベート スタック、プログラム カウンター、およびローカル変数がありますが、システム リソースを所有することはできません。プロセスのすべてのリソースを親プロセスの他のスレッドと共有します。
スレッドは特定のタスクを完了し、共有変数と親プロセスの環境の一部を他のスレッドと共有し、互いに協力してタスクを完了できます。
スレッドは独立して実行され、プロセス内に他のスレッドが存在するかどうかはわかりません。
スレッドの実行はプリエンプティブです。つまり、現在実行中のスレッドは、別のスレッドを実行するためにいつでも一時停止される可能性があります。
スレッドは別のスレッドを作成またはキャンセルでき、プロセス内の複数のスレッドを同時に実行できます。
Java は、スレッドを表すために Thread クラスを使用します。すべてのスレッド オブジェクトは、Thread またはそのサブクラスのインスタンスである必要があります。各スレッドの役割は、特定のタスクを完了することです。 . 、実際には、プログラム フロー (順番に実行されるコードの一部) を実行するためです。
#結論: 継承されたスレッドを使用してスレッド クラスをクラスのサブクラスとして作成する場合、複数のスレッドは変数 i
## などのスレッド クラスのインスタンス変数を共有できません。# 上記の解決策 2: Runnable インターフェイスを実装する
結論: Ruunable インターフェイスを使用して複数のスレッドを作成すると、スレッド クラスのインスタンス変数を共有します。これは、プログラムによって作成された Runnable オブジェクトがスレッドのターゲットのみであり、複数のスレッドがターゲットを共有できるため、複数のスレッドでインスタンス変数を共有できるためです。 Runnable によるマルチスレッドの実装は、実際には run をスレッド実行本体にパッケージ化することですが、現時点では Java はメソッドをスレッド実行本体にラップできません
オプション 3:callable と future を使用します。スレッドを作成する
Java5 は、Callable インターフェイス () メソッドの戻り値の呼び出しを表す Future インターフェイスを提供し、Future インターフェイスの FutureTask 実装クラスを提供します。このクラスは、Future インターフェイスを実装し、Runnable インターフェイスも実装します。これは使用できます。スレッドのターゲットとして。 実装手順:
1: Callableインターフェースの実装クラスを作成し、スレッドの実行本体となるcallメソッドを実装し、callメソッドは戻り値を持ちます。呼び出し可能なインターフェースを作成する場合はクラスを実装してください!
2: FutureTask クラスを使用して、Callable オブジェクトをラップします。FutureTask は、Callable クラスの call メソッドの戻り値をラップします。
3: FutureTask オブジェクトを Thread のターゲットとして使用します。新しいスレッドを作成して開始してください!
4: FutureTask の get メソッドを使用して、実行後の戻り値を取得します。
結論: Runnable とCallable 利点は、スレッド クラスは Runnable または Callable インターフェイスのみを実装し、他のクラスも継承できることです。このメソッドでは、複数のスレッドがターゲット オブジェクトを共有できるため、複数の同一スレッドが同じリソースを処理するのに非常に適しています。したがって、CPU、コード、データを分離し、明確な形式パラメータを持つモデルはオブジェクト指向プログラミングのアイデアを具体化します。欠点は、プログラミングの複雑さが若干高くなるということです。以上がJavaのスレッドの特徴と使い方は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。