(1)並行プログラミングJavaの並行プログラミングの芸術の挑戦

なぜ並行プログラミング

並行プログラミングは、プログラムを高速に実行できるように設計されています。並行プログラミングの問題に遭遇、コンテキストスイッチの問題、デッドロック、およびハードウェアとソフトウェアの制約によって制限されたリソース。

コンテキスト切り替え

これは、タスクのタイムスライス、現在のタスクの実行のタイムスライスを実行するためにCPUサイクルで次のタスク割り当てアルゴリズムに切り替わります。切り替えが戻ってタスクに切り替えるには次の状態への状態のタスク上に保持される前に、しかし、あなたは、このタスクをロードすることができます。だから、タスクは、リロードのプロセスからコンテキストスイッチを保存することです。

コンテキストスイッチを軽減する方法

コンカレントプログラミング・ロックなしの(1):ロック競合マルチスレッドは、そのようなハッシュアルゴリズムモジュロセグメント、異なるスレッドに従ったIDデータとして、アプローチのいくつかはロックの使用を回避するために使用することができ、データのマルチスレッド処理をコンテキストスイッチを引き起こす可能性が異なるセグメント内のデータを処理します。
(2)アルゴリズムCAS:データを更新原子CASアルゴリズムを使用するJavaパッケージは、ロックを必要としません。
(3)最小スレッドに:避けるような小さなタスクとして不要なスレッドを作成するが、ハンドルにスレッドの多くを作成し、これは、多数のスレッドが待機状態にある原因となる
(4)コルーチン:でシングルスレッドマルチタスクスケジューリングで単一スレッドで複数のタスクを切り替える維持します。

デッドロック

uは、サービスを提供し続けることができず、最終的に問題となっているスレッドダンプのスレッドで見ることができるので、お互いにいくつかの機能が使用できない原因と、ロックを解除するのを待っているスレッドT1およびT2のスレッドは、デッドロックと、ビジネスは、知覚されます。

デッドロックを回避するいくつかの一般的な方法

(1)ロックを回避するために、複数のスレッドを取得する
複数のスレッドを避けるために(2)を同時にロックのリソースを占有し、各ロックは、リソースことを確認しよう占有
lock.tryLock(タイムアウト)を使用して、試行のタイミングを用いて、(3)代わりに、内部ロック機構の使用
、データベースロックのロックを解除することができないと思われる、データベースに接続する必要があり、さもなければ状況を(4)をロックおよびロック解除

公開された24元の記事 ウォンの賞賛1 ビュー550

おすすめ

転載: blog.csdn.net/qq_45366515/article/details/105092436