内容
のJavaプログラミングのアイデア()1〜4章:概要
Javaのプログラミングのアイデア(b)の第5章:初期化とクリーンアップ
のJavaプログラミングのアイデア(c)の第6章:アクセス
7つのJavaプログラミングのアイデアの部(D):コンプレックスクラスと
Javaはアイデアを(E)をプログラミングする第8章:多型
のJavaプログラミングアイデア(6個)の第9章:インターフェース
のJavaプログラミングアイデア(7)第10章:内部クラス
11のJavaプログラミングのアイデアの章(h)は:オブジェクトを保持しています
Javaで思考(9)第12章:異常な
Javaで思考(x)の第13章:文字列
14のJavaプログラミングのアイデアの章(XI):型情報
(XII)第15章Javaのアイデアをプログラミング:一般的な
Javaのプログラミングのアイデア(13)第16章:アレイ
のJavaプログラミングアイデア(XIV)第17章:コンテナの詳細な研究
のJavaプログラミングのアイデア(XV)第18章:JavaのI / Oシステム
のJavaプログラミングアイデア(XVI)19章:列挙
Javaプログラミングのアイデア(17)第20章:ノート
のJavaプログラミングのアイデアの章(XVIII)21:同時実行
第20章同時実行
序文
- シーケンシャル・プログラミング:いつでもプログラム中のすべてのものが一つだけのステップを実行できること。
- コンカレントプログラミング:プログラム部分、複数のプログラムで並列に実行することができます。
21.1同時多面的な
並行プログラミングの難しさ:
- 複数の解決すべき問題の同時;同時達成するためのさまざまな方法があります。
- また、両者の間に明確なマッピングがありません。
21.1.1より速く実行
- 同時目的:改善する性能は、通常、単一のプロセッサ上で実行されます。
- 1を達成同時:最も直接的な方法は、オペレーティング・システム・レベルのプロセスを使用することです。
- 2達成同時:Javaは、より伝統的な方法で使用されます。言語の順に基づいて、スレッドのサポートを提供します。
並行性と並列性の違い:
- 同時:順番に複数のタスクを処理する:実際に実行される順次、CPUが実行唯一のスケジューリングスレッド割り当て期間によって異なる形態の任意の時点でスレッドが、ルックス複数のタスクを同時に実行している場合など。
- パラレル:同時に複数のタスクハンドル:あり、同時に複数のタスクを同時に。
21.1.2改良されたコードの設計
- プリエンプティブ糸通し機構:スレッドスケジューリング機構の端部は、定期的に、別のスレッドへの切り替えコンテキストは、それによって各スレッドがそのタスクを駆動するために妥当な時間に割り当てられるように、スレッドごとにタイムスライスを提供するであろう。
- ノンプリエンプティブ糸通し機構:各スレッドはCPUに多くのCPU時間を取ることができますどのくらいの時間。このスケジュールでは、実行は非常に長い時間することができるように、CPU、他のスレッドのすべてのスレッド「飢餓。」プロセッサがアイドル状態でプロセスがCPUを使用しない場合、すなわち、システムが一時的に他のプロセスがCPUを使用可能にすることができます。CPUスレッドは、それが自分自身のイニシアチブのCPUにリリースされただけでCPUの制御を持って、他のスレッドがCPUを使用することができます。
- スレッド機構を選択します:Javaはプリエンプティブ糸通し機構を使用しています。
21.2基本的なスレッド機構
- 並行プログラミング:我々のプログラムを作るには、実行している別の、独立したタスクの数に分けることができます。
- マルチスレッド機構:マルチスレッドによって、これらの独立したサブタスクの実行の各スレッドが駆動します。
21.2.1定義されたタスク
- タスク:タスクスレッドを駆動することができますので、あなたは、Runnableインタフェースによって提供することができるタスクを、記述するための方法が必要です。タスクを定義するには、単にタスクは、あなたのコマンドを実行できるように、Runnable実行()メソッドを記述し、実装します。
- スレッドの実行:クラスはRunnableを由来する場合、それはrun()メソッドを持っている必要がありますが、この方法はとても特別なものではありません。これは、任意の内部スレッド機能を生成しません。スレッドの動作を実現するには、明示的にタスクがスレッドに添付しなければなりません。
21.2.2 Threadクラス(スレッド)
- タスクの実行:作業タスクにRunnableオブジェクトを(パラメータとして)スレッドのコンストラクタにそれを提出することである伝統的な方法
21.2.3使用エグゼキュータ
- エグゼキュータ(エフェクター):管理スレッドオブジェクトとしてアクチュエータで定義されるJava SE5のjava.util.concurrentパッケージは、並行プログラミングを簡素化します。そして、タスククライアント間の実行とは、間接のレイヤーを提供します。
- エグゼキュータは:あなたは、スレッドのライフサイクル管理を表示することなく、非同期タスクを管理することができます。非常に一般的なシナリオ:シングルエグゼキュータは、すべてのタスク&管理システムを作成するために使用されます。