1.スレッドとプロセスとの間の差
システム上で実行されている各プログラムは、プロセスです。各プロセスは、1つ以上のスレッドが含まれています。スレッドは、命令のセット、または独立してプログラムで実行可能なプログラムの特別なセクションの集合です。また、コンテキストのコードの実行として理解することができます。だから、基本的には単一のプログラムで複数のタスクを実行する責任がある軽量プロセススレッド、。オペレーティングシステムによるスケジューリングと、複数のスレッドを実行するための通常責任を負います。
プログラムの速度を実行している、に対処するために、バックグラウンドタスクにプログラムで長い時間を占めることができるスレッドを使用すると、ユーザーの入力を待っているように、いくつかのタスクの実現に加速する可能性がある、ファイルは読み取りと書き込み、およびネットワークデータを送受信し、スレッドがより有用です。この場合、あなたは、このようなメモリの使用量としてなど、いくつかの貴重なリソースを解放することができます。
多数のスレッドが場合は、オペレーティング・システムがそれらを切り替える必要があるため、パフォーマンスに影響します、より多くのスレッドがより多くのメモリ空間を必要とする、スレッドのサスペンションは、プログラムの実行への影響を考慮する必要があります。典型的には、モデル・データ・ブロックは、複数のスレッド間で共有され、スレッドは、デッドロック状況を回避する必要があります。
要約:プロセスは、すべてのスレッドの組であり、各スレッドは、実行プロセスのパスです。
プロセスは、QQ、WXなどのスタンドアロンアプリケーションであります
スレッドの実行コードが最小単位、実行パス、であるサンダー複数のバッチテキストメッセージを送信ムービー、マルチスレッドダウンロード、データベース接続プーリングを、ダウンロードなど、スレッドプール
、あまりにも多くを開くことができない、あまりにも多くのCPUを消費するマルチスレッド、マルチスレッド目的は、コード実行の効率を改善することです
II。マルチスレッド
1.どのようなスレッドがありますか?スレッドは、互いに独立して、各スレッド実行のパスであります
2.何をマルチスレッド化されましたか?マルチスレッドは、プログラム効率を向上させるために、平行して、同じプロセス内の異なる実行パスの数であります
3.メインスレッドでの処理がなければなりません
4.スレッドカテゴリ:
Javaは、2件のスレッドがあり、1種類は、ユーザスレッドで他があるスレッドの守護者。
ユーザースレッドがさを意味し、ユーザーカスタマイズするために作成されたスレッドをメインスレッドは、停止され、ユーザースレッドは停止しません
デーモンスレッドプロセスが存在しないか、メインスレッドを停止する、デーモンスレッドもあろうこと停止。
使用は、setdaemon(true)メソッドを3つのデーモンスレッド、同期および非同期に
1.同期化の概念は、コードはトップダウン、同期要求HTTPから実行されます
2.非同期概念、並列に、互いに独立して、そのようなAJAXなど
第四に、マルチスレッドのアプローチ
1.継承されたスレッド、runメソッドをオーバーライドします
2. Runnableを達成するために、runメソッドを実装
3.匿名の内部クラス、直接新しいRunnableを(){ラン{}}
3.スレッドプール
第五に、スレッドの状態
状態と死の状態を遮断する、新しい状態、レディ状態、実行状態:作成からスレッドは、常に次の5つの状態のいずれかで最後まで実行します。
新しいビルド状態
ときに新しいのスレッドを作成し、オペレータは、例えば、スレッド(R&LT)を新たに、スレッドは、この場合、新たなスレッド状態で、実行するために開始されていません。スレッドは、新生状態、まだ実行中のスレッドを開始していないプログラムコードである場合には
レディ状態
新しいスレッドが作成されたスレッドが呼び出す必要があり、スレッドを実行するために、自動的に起動しないスタート()メソッド。スレッドオブジェクトの呼び出し時開始()でスレッドを起動する方法を、開始()を実行アプローチおよびスケジュールスレッド実行中のシステム・リソース・スレッド作成するラン()メソッドを。開始()メソッド戻り、スレッドが準備完了状態にあります。
必ずしもすぐには実行されません態勢の状態スレッドの実行()メソッドを、スレッドは、他のスレッドと競合しなければならないCPUののみ取得するには、時間のCPU 彼らはスレッドを実行する前の時間を。シングルなので、CPUのコンピュータシステム、同時に、1時間だけのスレッドが実行されている複数のスレッドを実行することは不可能です。したがって、この時点で、レディ状態にある複数のスレッドがあるかもしれません。レディ状態にある複数のスレッドがで決定されたJava ランタイムシステムのスレッドスケジューラ(スレッドスケジューラ)スケジュールします。
動作状態
スレッドは、取得したときのCPU 、それが本当のスタート実行前の動作に入った後の時間を実行()メソッド。
ブロッキング状態
スレッド実行中のプロセスは、それがブロックされた状態に様々な理由のためであり得ます。
1> を呼び出すことにより、スレッドの睡眠睡眠法を、
2> 内のスレッドの呼び出しI / O の入出力操作が完了する前に作動遮断することは、すなわち、操作が呼び出し元に戻りません。
3> スレッドがロックを取得しようとしますが、ロックが別のスレッドによって保持されています。
4> スレッドがトリガ条件を待っています。
死の状態
:なぜスレッド死二つの理由があります 1)実行方法が正常に終了し、自然の原因で死亡し、 2)キャッチされない例外が終了し、実行スレッド突然死の方法は。 生きている現在のスレッドかどうかを決定するために(すなわち、いずれかが実行されるかブロックされる)、使用のisAlive 方法。あなたが実行しているか、ブロックされている場合、このメソッドは返しtrueにスレッドがまだある場合は、新しい状態と実行することはできません、またはスレッドが死ぬ、それを返します偽。
参加する()メソッド演技法
スレッドT1およびT2のスレッドがユーザスレッドがある場合は、時刻t1 t2は、それらの実行後に実行してみましょう:T1のrunメソッドでt2.join参加し、私は方法Bでその前にBに参加したいです.join
メインスレッドは、それらを実行するときに()メソッドをt1.join場合、メインスレッドの実行がT1を譲らなければならないと考えられています
要件:作成スレッドは、子スレッドは、メインスレッドが実行するために、終了します。
スレッドT1 = 新しい スレッド(新しい Runnableを(){
@オーバーライド 公共 ボイド ラン(){ 以下のために (int型 、iは10 <; I = 0 iは++){ してみてください { 糸。睡眠(10)。 } キャッチ (例外e){
} システム。アウト(。スレッド.println currentThread().getName()+ "私:" + I)。 } } }); t1.start(); // それらを実行するときにメインスレッドt1.join()メソッドを考慮した場合、メインスレッドが譲渡実行すべきT1を t1.join(); 以下のために (int型 、iは10 <; I = 0 iは++){ してみてください { 糸。睡眠(10)。 } キャッチ (例外e){
} システム。アウト .println( "メイン" + "私:" + I)。 } |
VI。デーモンスレッド
Javaは、2件のスレッドがあり、1種類は、ユーザスレッドで他があるスレッドの守護者。
ユーザースレッドがさを意味し、ユーザーカスタマイズするために作成されたスレッドをメインスレッドは、停止され、ユーザースレッドは停止しません
デーモンスレッドプロセスが存在しないか、メインスレッドを停止する、デーモンスレッドもあろうこと停止。
使用は、setdaemon(true)メソッドをデーモンスレッドを設定します
非デーモンスレッド機能:メインスレッドとお互いに影響を与えます
これは結論:ユーザは、メインスレッドが終了した場合であっても、スレッドを作成し、終了ではありません、
t1.setDaemon(:ユーザスレッドがスレッドをデーモンにすると、使用trueに)、メインスレッドの終わりには、彼はまた、終了