logo

Java でのマルチスレッド化

  1. マルチスレッド化
  2. マルチタスク
  3. プロセスベースのマルチタスク
  4. スレッドベースのマルチタスク
  5. スレッドとは

マルチスレッド化 ジャワ 複数のスレッドを同時に実行するプロセスです。

スレッドは軽量のサブプロセスであり、処理の最小単位です。マルチプロセッシングとマルチスレッドは、どちらもマルチタスクを実現するために使用されます。

2つの文字列の違いPython

ただし、スレッドは共有メモリ領域を使用するため、マルチプロセッシングではなくマルチスレッドを使用します。個別のメモリ領域を割り当てないためメモリが節約され、スレッド間のコンテキスト切り替えにかかる時間はプロセスよりも短くなります。

Java マルチスレッドは主にゲームやアニメーションなどで使用されます。


Java マルチスレッドの利点

1) それ ユーザーをブロックしません スレッドは独立しており、複数の操作を同時に実行できるためです。

2) あなた 多くの操作をまとめて実行できるため、時間を節約できます

3) スレッドは 独立した , そのため、単一のスレッドで例外が発生しても、他のスレッドには影響しません。


マルチタスク

マルチタスクとは、複数のタスクを同時に実行するプロセスです。 CPUを活用するためにマルチタスクを使用します。マルチタスクは次の 2 つの方法で実現できます。

  • プロセスベースのマルチタスク (マルチプロセッシング)
  • スレッドベースのマルチタスク (マルチスレッド)

1) プロセスベースのマルチタスク (マルチプロセッシング)

  • 各プロセスはメモリ内にアドレスを持っています。つまり、各プロセスは個別のメモリ領域を割り当てます。
  • プロセスは重量級です。
  • プロセス間の通信コストが高くなります。
  • あるプロセスから別のプロセスに切り替えると、保存とロードに時間がかかります レジスター 、メモリマップ、リストの更新など。

2) スレッドベースのマルチタスク (マルチスレッド)

  • スレッドは同じアドレス空間を共有します。
  • 糸が軽い。
  • スレッド間の通信コストは低くなります。

注: 各スレッドには少なくとも 1 つのプロセスが必要です。

Javaのスレッドとは何ですか

スレッドは軽量のサブプロセスであり、処理の最小単位です。これは別の実行パスです。

スレッドは独立しています。 1 つのスレッドで例外が発生しても、他のスレッドには影響しません。共有メモリ領域を使用します。

Java マルチスレッド化

上図に示すように、プロセス内でスレッドが実行されます。スレッド間でコンテキストの切り替えが行われます。 OS 内には複数のプロセスが存在することがあり、1 つのプロセスが複数のスレッドを持つことができます。

注: 一度に実行されるスレッドは 1 つだけです。

Javaスレッドクラス

Javaが提供する スレッドクラス スレッドプログラミングを実現します。スレッドクラスが提供する コンストラクター およびスレッド上で操作を作成および実行するためのメソッド。スレッドクラスの拡張 オブジェクトクラス Runnableインターフェイスを実装します。

Java スレッドのメソッド

S.N. 修飾子とタイプ 方法 説明
1) 空所 始める() スレッドの実行を開始するために使用されます。
2) 空所 走る() スレッドに対してアクションを実行するために使用されます。
3) 静的ボイド 寝る() 指定された時間だけスレッドをスリープさせます。
4) 静的スレッド currentThread() 現在実行中のスレッド オブジェクトへの参照を返します。
5) 空所 参加する() スレッドが終了するのを待ちます。
6) 整数 getPriority() スレッドの優先度を返します。
7) 空所 setPriority() スレッドの優先度を変更します。
8) getName() スレッドの名前を返します。
9) 空所 setName() スレッド名が変わります。
10) 長さ getId() スレッドのIDを返します。
十一) ブール値 生きている() スレッドが生きているかどうかをテストします。
12) 静的ボイド 収率() これにより、現在実行中のスレッド オブジェクトが一時停止され、他のスレッドが一時的に実行できるようになります。
13) 空所 つるす() スレッドを一時停止するために使用されます。
14) 空所 再開する() 一時停止されたスレッドを再開するために使用されます。
15) 空所 停止() スレッドを停止するために使用されます。
16) 空所 破壊する() これは、スレッド グループとそのすべてのサブグループを破棄するために使用されます。
17) ブール値 isDaemon() スレッドがデーモン スレッドであるかどうかをテストします。
18) 空所 setDaemon() スレッドをデーモン スレッドまたはユーザー スレッドとしてマークします。
19) 空所 割り込み() スレッドが中断されます。
二十) ブール値 中断されました() スレッドが中断されたかどうかをテストします。
21) 静的ブール値 中断されました() 現在のスレッドが中断されたかどうかをテストします。
22) 静的整数 アクティブカウント() 現在のスレッドのスレッド グループ内のアクティブなスレッドの数を返します。
23) 空所 checkAccess() 現在実行中のスレッドにスレッドを変更する権限があるかどうかを判断します。
24) 静的ブール値 ホールドロック() 現在のスレッドが指定されたオブジェクトのモニター ロックを保持している場合に限り、true を返します。
25) 静的ボイド dumpStack() 現在のスレッドのスタック トレースを標準エラー ストリームに出力するために使用されます。
26) スタックトレース要素[] getStackTrace() スレッドのスタック ダンプを表すスタック トレース要素の配列を返します。
27) 静的整数 列挙() これは、すべてのアクティブなスレッドのスレッド グループとそのサブグループを指定された配列にコピーするために使用されます。
28) スレッドの状態 getState() スレッドの状態を返すために使用されます。
29) スレッドグループ getThreadGroup() このスレッドが属するスレッド グループを返すために使用されます
30) toString() これは、スレッドの名前、優先順位、スレッド グループを含む、このスレッドの文字列表現を返すために使用されます。
31) 空所 通知() これは、特定のオブジェクトを待機している 1 つのスレッドのみに通知を与えるために使用されます。
32) 空所 すべて通知() これは、特定のオブジェクトの待機中のすべてのスレッドに通知を与えるために使用されます。
33) 空所 setContextClassLoader() スレッドのコンテキスト ClassLoader を設定します。
3.4) クラスローダー getContextClassLoader() スレッドのコンテキスト ClassLoader を返します。
35) 静的 Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 例外がキャッチされなかったためにスレッドが突然終了したときに呼び出されるデフォルトのハンドラーを返します。
36) 静的ボイド setDefaultUncaughtExceptionHandler() 例外がキャッチされなかったためにスレッドが突然終了したときに呼び出されるデフォルトのハンドラーを設定します。
あなたは知っていますか
  • 2 つのスレッドで 2 つのタスクを実行するにはどうすればよいですか?
  • 匿名クラスでマルチスレッドを実行するにはどうすればよいですか?
  • スレッド スケジューラとは何ですか?また、プリエンプティブ スケジューリングとタイム スライシングの違いは何ですか?
  • スレッドを 2 回開始するとどうなりますか?
  • start() メソッドの代わりに run() メソッドを呼び出したらどうなるでしょうか?
  • joinメソッドの目的は何ですか?
  • ユーザー スレッドが残っていない場合、JVM がデーモン スレッドを終了するのはなぜですか?
  • シャットダウンフックとは何ですか?
  • ガベージコレクションとは何ですか?
  • Finalize() メソッドの目的は何ですか?
  • gc() メソッドは何をするのでしょうか?
  • 同期とは何ですか?なぜ同期を使用するのですか?
  • 同期メソッドと同期ブロックの違いは何ですか?
  • 静的同期を実行する 2 つの方法は何ですか?
  • デッドロックとは何ですか?また、いつ発生する可能性がありますか?
  • スレッド間の通信または協力とは何ですか?
マルチスレッドで何を学ぶのか
  • マルチスレッド化
  • スレッドのライフサイクル
  • スレッドを作成する 2 つの方法
  • 複数のスレッドで複数のタスクを実行する方法
  • スレッドスケジューラ
  • スレッドをスリープ状態にします
  • スレッドを 2 回開始できますか?
  • start() メソッドの代わりに run() メソッドを呼び出したらどうなるでしょうか?
  • スレッドに参加する
  • スレッドに名前を付ける
  • スレッドの優先順位
  • デーモンスレッド
  • シャットダウンフック
  • ガベージコレクション
  • synchronizedメソッドによる同期
  • 同期ブロック
  • 静的同期
  • デッドロック
  • スレッド間通信