Javaマルチスレッドの初歩的な理解


はい、実習筆記試験の面接を探しているので、先輩からもらった本のリストに基づいて、javaマルチスレッド、tomcatなどの知識を理解して、今日はまずjavaマルチスレッドについて話します.思い出してみると、オペレーティングシステムの中でプロセスとスレッドの関係について、ずっと虚しいと思っていたものは、前に書いたことがないので、今でも理解する必要があります.
1.スレッドとプロセスの違い、java仮想マシンの実行時のメモリステータス.
1つのプロセスには複数のスレッドが含まれ、1つのプロセスは1つのプログラムの実行に対応するが、1つのスレッドはプロセス実行中の個別の実行シーケンスであり、スレッドは軽量レベルのプロセスとも呼ばれることがある.
Java仮想マシンのインスタンスは、Java仮想マシンプロセスが属するスタックメモリを異なるスレッドで共有する個別のプロセスで実行されます.スタックには、プロセスの実行中に作成されたオブジェクトが格納されているためです.これは、異なるスレッドが同じオブジェクトにアクセスできる理由です.スレッドは互いにスタックメモリを共有しますが、それぞれにスタックスペースがありますよ.格納方法は値、ローカル変数などを返します.これは、スレッドがメソッドを呼び出すと、そのローカル変数がスレッドのセキュリティを保証できる理由を理解することができます.ただし、スタックメモリはスレッドが安全ではありません.表示されたライフ同期によってスレッドが安全であることを確認する必要があります.
2.スレッドの各種状態
このオペレーティングシステムは詳しく話していますね.javaのThreadクラスで提供されている対応方法と結びつけて説明することができます.
a.実行可能状態(Runnable):start()メソッドを呼び出すと、スレッドが実行可能状態になりますが、すぐに実行を開始するわけではありません.スレッドプールに格納され、スレッドスケジューラによってスレッド優先度に基づいて実行が保留されるタイミングが決定されます.
b.実行中(Running):プロセッサはすでにスレッドのコードを実行している.彼は遮断されるまで運転したり、静的な方法で実行したりします.yield()は実行の機会を自ら放棄し,シーン切替によるオーバーヘッドを考慮してyield()メソッドを頻繁に呼び出すべきではない.
c.待機中(Waiting):スレッドはI/O待ちまたは外部プロセス待ちの処理結果により待機状態となり、Threadを呼び出す.wait()メソッドは、他のスレッドがThreadを呼び出すまで、現在のスレッドを待機状態にする.いいえ、そうではありません.notifyAll().
d.睡眠中(Sleeping):リロード方法Thread.sleep(milliseconds)は、スレッドを睡眠状態に追い込むことができる.
3.Thread.State列挙タイプにはjava仮想マシンがサポートするすべてのスレッドステータスタイプが含まれており、以下のjavaのスレッドの目的は、これらのスレッドステータスが可能であることを保証します.
  • オブジェクトは、任意のスレッドによって共有および変更することができる.
  • スレッドスケジューラのプリエンプト特性は、スレッドがマルチコア処理間でプロセッサコアをいつでも切り替えることができるようにし、これは、方法が実行中に状態を切り替えることができることを意味する.そうでなければ、方法のデッドサイクルはCPUを常にブロックし、異なるスレッドの他の方法は常に実行されない.
  • スレッドセキュリティの問題を防止するために、脆弱な方法またはコードブロックをロックすることができる.これにより、スレッドは、ロックまたはロック要求処理の2つの状態にあってもよい.
  • スレッドは、Sockets、ファイルハンドル、データベース接続などのI/Oリソースの処理中に待機状態に入ります.
  • I/O読み書き中のスレッドは切り替えられないため、成功/失敗の結果で正常に処理が完了したり、他のスレッドが対応するリソースを閉じて死亡または完了の状態に追い込まれたりします.これは、I/O処理によってスレッドが常にブロックされることを回避し、深刻なパフォーマンスの問題を引き起こす合理的なタイムアウト時間である.
  • スレッドは、待機中の他のスレッドが実行される機会を与えるためにスリープ状態に入ることができる.