201711671224「Javaプログラミング」の章12学習の概要

Javaスレッド

スレッドは、その実行プロセスの処理は、あなたが実行手がかり、各スレッドは、独自の生産、存在とプロセスの終焉を持っていることを各手がかりを複数形成する、複数のスレッドを生成することができ、処理実行部よりも小さくなっています。

マルチスレッドは、いくつかのがあると同時に、アプリケーションの実行ファイルを指し、状況に応じて、いくつかの異なる実行手がかりが一緒に動作するように、プログラマが簡単にマルチスレッドの発行機能を開発することを可能にする、強力な複数のタスクを同時に処理しますアプリケーション。

実行はいくつかのイベントの感触をスレッドが同時に発生しますが、いつでもコンピュータにのみだけでJVMを制御するために、複数のスレッドを実行することができますがすぐに別のスレッドから切り替えることができます。

すべてのスレッドは、プログラムの終了前に端を実行するまで、他のスレッドが作成されていない場合は、メインスレッドが実行している場合、各Javaアプリケーションは、一つのメインスレッド(メインスレッド)は、スレッドの終了は、作成した場合、待ちます。

 

プロセスとスレッド

基本的な違い:プロセスは、オペレーティング・システム・リソース割り当ての基本単位であり、スレッドはタスクのスケジューリングおよび実行の基本単位であります

オーバーヘッドの点で:各プロセスは、より大きなオーバーヘッドを有するプログラムの切り替え、自身のコードとデータ空間(アプリケーション・コンテキスト)を有し、スレッドが軽量プロセスとして見ることができる、スレッドがコードおよびデータ空間の同じタイプを共有します各スレッドは、スレッドのオーバーヘッドとの間の小さなスイッチを、独自の独立した実行時スタックとプログラムカウンタ(PC)を有しています。

環境:同時にオペレーティング・システム内の複数のプロセス(プログラム)を実行し、(膜たびに1つだけ実行スレッドを有し、CPUスケジューリングによって)実行し、同様の処理(プログラム)内の複数のスレッドが同時に存在します

メモリ割り当て:システムは、異なるメモリ空間を実行している各プロセスに割り当てられると、スレッド、CPUに加えて、システムはしないであろう(そのリソースから使用されるリソース・スレッドのプロセスに属する)は、スレッドのためのメモリを割り当てますあなたは、リソース、スレッドグループを共有することができます。

包含関係:NOスレッドが手順を実行し、プロセス内の複数のスレッドが存在する場合、シングルスレッドのプロセスとして見ることができないラインではなく、一緒にライン(スレッド)の複数が完了するまで、スレッドは、プロセスの一部であり、そう糸はまた、軽量プロセスまたはLWPとして知られています。

 

ターゲットオブジェクトとスレッド間の関係

1)対象物とのスレッドが完全に切り離さ

- ターゲットオブジェクトは、ターゲットオブジェクトは、スレッドオブジェクトの組み合わせは、多くの場合、(彼らはスレッドオブジェクトの参照を取得することはできませんので)実行されているCPUリソース、すなわちJVMのスレッドであるスレッドかを決定するために、スレッドの名前を取得する必要がされていません。

2)スレッドオーディエンスの組み合わせ(弱い結合)

- ターゲットオブジェクトクラス組み合わせスレッドスレッドオブジェクトは、ターゲットオブジェクトがスレッドオブジェクトを参照することによって得ることができる場合、ターゲットオブジェクトを組み合わせることができます。

 

Threadクラスとスレッドを作成します。

Java言語では、Threadクラスまたはサブクラスにスレッドオブジェクトを作成します。Threadクラスのサブクラスを記述する場合は、親クラスのrun()メソッドは、任意のオペレーティング文が含まれていないため、特定の業務要件スレッドを目指し、またはスレッドが何もしない親クラスのrun()メソッドをオーバーライドする必要があります。スレッドを作成するもう一つの方法は、Threadクラスと直接スレッドオブジェクトを作成することです。スレッド(Runnableを対象):一般的に使用されるコンストラクタがあるスレッドを作成するために、スレッドを使用してください。

コンストラクタのパラメータは、Runnableインタフェースタイプです。

コンストラクタの引数に、Runnableインタフェースを実装するクラスのインスタンスをスレッドオブジェクトを作成する際に、送信スレッドの呼び出しは()メソッドを開始した後、ターゲット・スレッドによって作成されたオブジェクトのオブジェクトインスタンスを呼び出さなければなりません、それはCPUリソースへのアクセスにその順番があると、観客が実行される()メソッド(コールバックインタフェース)インタフェースが自動的に呼び出されます。

 

一般的な方法のスレッド

1。開始():スレッドを使用して、独自の独立したライフサイクルを開始するスレッドからそれを作成することができ、レディキューのラインアップに、新たな状態となるよう、CPUリソースを楽しむために、一度それを回す方法は、スレッドを開始します呼び出します。

2。ラン():スレッドクラスランの同一の機能及び役割()、Runnableインタフェースメソッド()メソッドを実行し、スレッドが操作オブジェクトを定義するために使用されるが、スケジューリングの後に実行され、システムが自動的にユーザプログラムが参照することができないコールされ方法。

3。スリープ(INT millsecond):優先度の高いスレッドは、自身がCPUリソースを放棄させるためにそのrun()メソッド、いくつかの時間のための睡眠中にスリープメソッドを呼び出すことができます。  

4。isAliveは(): "新しい" 状態のスレッドは、スレッドがのisAlive()メソッドがfalseを返す呼び出します。死の状態を入力していないスレッドメソッドの最後まで実行前に()、スレッドがのisAlive()メソッドがtrueを返す呼び出します。

5。currentThread():このメソッドは、Threadクラスのクラスメソッドである、あなたはスレッドが現在のCPUリソースを使用している返すというクラス名を、使用することができます。  

6。インタラプト():スレッドがCPUリソースが眠っているスレッドの呼び出しは、CPUリソースを待っている()異常自らを「目覚め」方法、休止状態のスレッドの発生にそのリードInterruptedExceptionある、休眠を終了、再キューを中断することができます占めています。     

 

スレッド同期

二つ以上のスレッドが同時に同じ変数にアクセスすると、スレッドは、この変数を変更する必要があります:マルチスレッドの問題に対処するには、我々はこの問題に注意を払う必要があります。私たちは、に対処するため、このような問題に対処します。

スレッドの同期を扱うには、まず最初に行うには、修正するためにsynchronizedキーワードでのデータ修正方法を取ることです。

いわゆるスレッドの同期は、スレッドの数が同期の修正方法を使用する必要があります。

 

スレッドの同期の調整

スレッドが待機を一時的にCPUを使用する権利を放棄し、他のスレッドがこの同期方法を使用することを可能にするように待機()メソッドは、実行の方法を中断することができます。

notifyAll()メソッドが原因終了を待っている待機中のスレッドで、この方法の使用同期のすべてを通知します。彼は、スレッドがちょうどオフに左からの同期方法を実行し続ける、との原則「を継続するために最初のブレーク」続く中断されました。

通知()メソッドは、待機中のスレッドにウェイトの一端に気づきます。

 

合同スレッド

等所有CPUリソース中スレッド、他のスレッドの呼び出しは(参加可能にする)と、このねじ継手、:B.join();

関節動作は、B.中に前記しました スレッドは、スレッドBに一度の関節の間にCPUリソースを占有している場合、スレッドは、すぐに実行を中断し、実行を再開するためには、それは共同スレッドBが終了するまで、スレッドのCPUリソースの再キューイングされお待ちしております。AとB共同で準備されたスレッドが終了している場合は、B.join()は何の効果もありません。

 

 GUIスレッド

AWT-EventQuecueとAWT-Windowsの場合:Javaプログラムがグラフィカル・ユーザー・インターフェース(GUI)を含んでいる場合、あなたは二つの重要なスレッドを持つアプリケーションを実行すると、Java仮想マシンは、自動的に多くのスレッドを開始します。AWT-EventQuecueのスレッドがGUIイベントを処理する責任があり、AWT-Windowsのスレッドがデスクトップにフォームまたはコンポーネントを描画するための責任があります。各スレッドがCPUリソースを持っていることを保証するJVMの機会、例えば、プログラム中のGUIイベント、JVMは、AWT-EventQuecueスレッドにCPUリソースを切り替えます、スレッドがAWT-EventQuecueをします。このイベントを処理するために、たとえば、あなたをActionEventイベントをトリガー、プログラム内のボタンをクリックし、AWT-EventQuecueスレッドがすぐにイベントを処理するコードの実行のためにキューに入れ   

 

タイマースレッド

「リンギング」タイマーミリ秒ごとに、bが、パラメータ監視タイマです。タイマーイベントが発生するリンギングがイベントのActinEventタイプです。リンギングイベントが発生すると、イベント・モニターは、コールバックActionListenerインタフェースのactionPerformed(のActionEvent e)の方法を監視するために、監視されます。()Timerクラスを開始使ってスレッドを開始タイマーを開始します。()Timerクラスメソッドストップを使用し、タイマー、回復スレッドを再起動し、再起動を()を使用して、スレッドを一時停止するタイマーを停止します。

デーモンスレッド

スレッドは、ボイドは、setdaemon(ブール)メソッドは保護者等(デーモン)スレッドとして自身を設定することができ呼び出し:thread.setDaemon(TRUE)。

すべてのユーザースレッドプログラムがrunメソッドのデーモンスレッドの文が実行される必要があるが、また、デーモンスレッドを実行するための即時終了しても、実行の終了している場合には

おすすめ

転載: blog.csdn.net/nemeziz/article/details/84522459