七、Javaのマルチスレッド・ベースの概要

まず、乾燥品

三つの要素1.並行プログラミング

<1>原子の:不可分1つまたは複数の操作を指し、実行いずれかの他のすべての操作は実行せずに実行中、または全てに中断されることはありません。

<2>可視性:可視性は、変数は、スレッドを変更する、請求項共有変数を操作する複数のスレッドを指し、他のスレッドは、直ちに変更の結果を見ることができます。

<3>の順序:すなわち順にプログラムコードの実行の順序順序付けを行います。

2.何の可視性を実現する方法

同期またはロック:ロックの最新値のリリースは可視性を達成するために、メインメモリにフラッシュする前に、同じ時間取得にロックコードの実行をその一つのスレッドだけを確実にするために。

3つの方法の比較では、スレッドを作成します3。

<1>。用途が実行可能、マルチスレッドインタフェースを作成する呼び出し可能な方法を実現します。

長所:Threadクラスの実装、Runnableインタフェースまたは単に呼び出し可能インターフェースは、あなたはまた、他のクラスから継承することができます。このように、複数のスレッドが同じターゲット・オブジェクトを共有することができる、より良い反映して、分離することができ、同じリソースは、CPU、コードとデータの明確なモデルを形成する場合に対処するため、複数のスレッドで同じですオブジェクト指向の考え方。

短所:あなたは、現在のスレッドにアクセスしたい場合は少し複雑なプログラミングは、あなたがにThread.currentThread()メソッドを使用する必要があります。

<2>使用する複数のスレッドを作成するには、Threadクラスの継承方法

長所:あなたが現在のスレッドにアクセスする必要があれば書きやすい、あなたは、これは現在のスレッドを取得するためにThread.currentThread()メソッド、直接使用を使用する必要はありません。

短所:スレッドクラスThreadクラスはので、他の親を継承することはできません、継承されています。

差<3> .Runnable、呼び出し可能

3.1).Callableがオーバーライド(所定の)()は、Runnableを、所定のメソッド呼び出しである(オーバーライド)メソッドが実行されます()。

.Callableタスクの実行後3.2)が値を返すことができますが、Runnableをタスクは、戻り値ではありません。

3.3)は.callメソッドは、runメソッドができない、例外をスローすることができます。

3.4)。ファイル名を指定して実行呼び出し可能タスクは、非同期計算の結果を表し未来のオブジェクトを取得することができます。これは、計算が完了すると、検索結果の計算のために待機するように、計算をチェックする方法が完了しています。未来のことで、オブジェクトは、タスクの実行をキャンセルし、任務の実装を理解するだけでなく、結果を得ることができます。

4.スレッド流れ図の状態

ライフサイクルとスレッドの5つの基本状態:

å²ä¸æ强å¤çº¿ç¨éè¯47颢(çæ¡」A)ï¼å»ºè®®æ¶è

1)新しい状態(新):作成されたオブジェクトの後ときのような新たな状態になりスレッド:スレッドT =新しいMyThread() 。

2)レディ状態(Runnableを):start()メソッド(t.start(コーリングスレッドオブジェクト);)、レディ状態であるスレッド。準備状態のスレッドに、このスレッドを例示するものであるt.startの実装(と言うことではない、任意の時点で実行されるようにスケジュールCPUを待って、準備ができている)このスレッドは直ちに実行されます。

3)実行状態(実行):CPUのスレッドのスケジューリングがレディ状態で開始し、この時間は本当にランモードに入るのスレッドを実行することができましたさ。注:準備状態は、最初にすべてのは、即応の状態である必要があり、実行中の状態を入力するために、スレッドの実行で動作状態、アクセスの唯一の手段です。

4)ブロッキング状態(ブロック):一時的に再びCPUと呼ばれるチャンスがあり、それがレディ状態に入るまでのブロックに、この時間は、CPUを使用して実行を停止する権利を放棄し、何らかの理由でスレッドを実行していますランモードに入ります。

生成され、ブロックされた状態を阻止するための理由に応じて、3つのタイプに分けることができます。

ブロッキング1.待ち:実行待ち状態動作()メソッドのスレッドを、スレッドが待機状態閉塞に入るように。

2.同期ブロック - 同期を得る際のスレッド同期ロック失敗(ロックが別のスレッドによって占有されたため)、それは同期ブロッキング状態になります。

3.その他のブロックされた - 睡眠によって()、または呼び出したスレッド()または発行されたI / O要求を、ブロックされた状態にスレッドに参加します。睡眠()タイムアウトは、参加()またはスレッドのタイムアウト待ちが終了するため、またはI / O処理は、準備完了状態にスレッドが再び完了しています。

5)死状態(デッド):スレッドの実行が上や、異常終了するrun()メソッド、ライフサイクルの糸端です。

変数を変更する方法5.スレッドAスレッドBのノウハウ

1).volatile変数を変更

2).synchronized修飾法は、変数を変更します

3).WAIT /通知

4)ポーリング.while(一時的に使用されていません)

公開された122元の記事 ウォン称賛64 ビュー50000 +

おすすめ

転載: blog.csdn.net/chenmingxu438521/article/details/103814238