スレッドの概念と使用

1.スレッドとプロセスの概念

1.プロセスとスレッドの理解

1)プロセスとは、実行中のプログラムを指します。
プログラムは、実行中にタスクを実行できます。タスクはスレッドと呼ばれます
。2)プロセスは、プログラム実行中のリソース割り当てと管理の基本単位です。
スレッドは最小単位です。 CPUにより実行される。
プロセスは、独自の独立したアドレス空間、プロセスが開始されるたびに、所有していると、システムはAの。アドレス空間を割り当てます
、プロセスが複数のスレッドを持つことができ、プログラムのメモリ空間は、各スレッド間で共有されている。
なぜスレッドは表示されますか?
各プロセスには独自の独立したアドレス空間、複数の同時リクエストがあり、リクエストごとにプロセスが作成されるため
、システムのオーバーヘッドが発生し、ユーザーリクエストの効率が低下します。
シリアル-「バッチ-」プロセス-「スレッド」

インタビューの質問:マルチスレッドとマルチプロセスの違いは何ですか?

1)各プロセスには独自のデータがあり、スレッドはデータを共有します
。スレッド間の通信は、プロセス間の通信よりも効果的で簡単です
。2)スレッドは、プロセスの作成/破棄よりも安価です
。3)プロセスはリソースです。最小割り当ての単位、スレッドはcpuスケジューリングの最小単位です
。4)マルチプロセスプログラムはより堅牢です。マルチスレッドプログラムの1つのスレッドがハングしている限り、リソースを共有する
他のスレッドにも影響します
。5)追求する場合速度、
頻繁な作成と破棄の
場合はスレッドを選択、
スレッドを選択します。より安定したシステムを追求する場合は、プロセスを選択します。スレッドは軽量プロセス
JVM-「プロセス」です。

2.スレッドの作成

1)Threadクラスを継承し、テレビを見ながら食事をしながらrun()メソッドを
書き直します2)Runnableインターフェースを実装し、runメソッドを書き直します
3)匿名スレッドanonymous内部クラス
4)Callableインターフェースを実装し、callメソッドを書き直し
ますCallableインターフェースが存在しますExecutorフレームワーククラスでは、Runnableと比較してより強力です。a。Callableは
、タスクの実行が終了した後に戻り値を提供できます。b。Call
メソッドは例外をスローでき
ます。c。RunCallableタスクはFutureオブジェクトを取得でき、Futureは取得するgetメソッド
提供します。戻り値(非同期)

CallableとFutureTaskを介してスレッドを作成します。

。呼び出し方法書き換え、呼び出し可能インタフェースの実装クラスを作成し
、Bを。FutureTaskを有するインスタンスをラップし、呼び出し可能な実装クラスのインスタンスを作成し
、C。パラメータとしてFutureTaskインスタンスとスレッドオブジェクトを作成し
、D。スレッド開始
Eを。FutureTaskのgetメソッドを呼び出して、子スレッドの実行結果を取得します。

インタビューの質問:呼び出し可能インターフェースと実行可能インターフェースの違い:

1)直感的に
2)上記を使用する
3)シーンを使用する

3.スレッドのライフサイクルと一般的な方法の分析

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

new(新しい状態)newキーワードはスレッドオブジェクトを作成しますが、実行状態ではありません。
スレッドを開始する開始がないためです。実行
可能(準備完了状態)スレッドオブジェクトはstartメソッドを呼び出します。これは、スレッドの実際の作成です。 JVMでは、スレッド開始
するとすぐには実行されません。この状態のすべてのスレッドは準備完了スレッドプールにあり、プロセッサなどのオペレーティングシステムリソース
がcpu
Blocked(blocked状態)を使用する権利を取得するのを待機しています。)モニターロックが同期コードブロックまたは同期メソッドに入るのを待っています。ブロック/メソッド
は実行スレッドのみを持つことができ、他のスレッドは待機することができます
(待機状態)Object.wait()/ Thread.join() / LockSupport.park()は、実行可能
遷移から待機状態
Timed_Waiting(スリープ状態)まで、スレッドがブロックされるようになります。Object.wait(long mills)/Thread.slepp(long mills)/ LockSupport
.parkNano()/ LockSupportを呼び出します。.parkUntil()タイムアウトパラメータ付きの
終了(終了状態)はスレッドですスレッドの最終状態は終了状態になります。これは、スレッドのライフサイクルが終了したことを意味します。次の状況では、スレッドが終了状態になります。

  • 1)スレッドの実行は正常に終了します
  • 2)スレッドの予期しない終了実行エラー
  • 3)JVMクラッシュ

スレッドの一般的なメソッド

1)start()
はスレッドを開始し、スレッドをスレッドグループに追加します。スレッドの状態は、New状態からRunnable状態に変わり
、実行を実行するCPUを取得した後にRunning状態になります
。2)sleep()
sleepは静的メソッドであり、存在します。2つのオーバーロードされた関数
public static native void sleep(long millis)
public static void sleep(long millis、int nanos)
スレッドをスリープ状態にし、実行を一時停止し、スリープは所有権を放棄しません
jdk1.5の後、jdkは1つの列挙TimeUnitを導入します。これは、スリープメソッドをカプセル化し、
スレッドスリープなどの時間単位変換のステップを直接使用します。3h27min8sec88msec3
)yield()
yieldは、CPUスケジューラに私が喜んでいることを思い出させることを意味しますCPUリソースがタイトでない場合は、現在のCPUリソース、(発見的方法に属する)を放棄し
、このプロンプトは無視されます

インタビューの質問:収量と睡眠の間の差a.jdk1.5前に、収率は睡眠と呼ばれる
B .sleepは、現在のスレッドの実行を一時停止させ、cpuリソースを占有しません。yield
だけcpuスケジューラーへのヒント
c.sleepはスレッドを一時的にブロックし、yieldはスレッドを実行可能にします-"Runnable
d.sleep will catch割り込み例外、yieldは割り込み例外をキャッチしません

4)join()
意味:スレッドAをスレッドBに参加させると、スレッドBはスレッドAがライフサイクルを終了するか、指定された時間に達するまで待機します。
その間、スレッドBは待機状態になります
5)wait()
6) notify()
7)notifyAll()
8)スレッド割り込みメソッド

おすすめ

転載: blog.csdn.net/qq_41571459/article/details/113937155