並行処理(同時実行)は、簡単に言えば、奇妙な言葉ではありませんCPUで同時に複数のタスクを実行します。
Javaの並行処理の実装をマルチスレッド化することによって。
世界では、JVM、同じように無関係な並列スレッドのスペース、仮想マシンでシリアル。(もちろん、これは、スレッド間でより一般的な用語の相互作用が可能である、彼らは必ずしも連続ではありません。)
マルチスレッドの存在は、アプリケーションのパフォーマンスを向上させ、プレスCPUですが、また、(現実的な時間で設計プログラムを考えて)、特定の設計の複雑さを軽減します。
マルチスレッドは、そのようなので、上のオーバーヘッドデッドロック、汚い、スレッド管理、およびなどを回避することは困難で多くの問題につながります。これは、大幅にプログラミングの複雑さを増加します。
デッドロックとダーティデータは、典型的なスレッドの安全性の問題。
簡単に言えば、セキュリティスレッドはこれです: マルチスレッド環境では、プログラムの正しさを保証することはできません。
存在だけが共有データあなたがスレッドの安全性の問題を考慮する必要があります。
スレッドの安全性の問題を解決します:
どのように実際に解決するために、プロセスの焦点です。現在、三つの方法で解決:
まず、スレッドモデルを変更します。これは、スレッド間で共有状態変数ではありません。一般的に、この変更が比較的大きい、私たちは何をする必要があります。
第二に、オブジェクトは不変オブジェクトになります。時には、実現するために失敗します。
第三に、それはより一般的であり、そして同期の使用は、状態変数にアクセスするとき。同期とロックを同期させることができます。あなたがアクセスしたり、他のスレッドが入力するように可変ロック状態、排他的なオブジェクトを変更するとき簡単に言えば、それは、あります。
これは、スレッドを分離するための方法だろう。(この方法では、などのデッドロック、パフォーマンスの問題、など多くの欠点が、あります)
実際には、より良い方法は、スレッドセーフなクラスを設計することであります。「コードコンプリート」が挙げ、早く問題が解決され、より少ないコストはそれがかかります。
はい、設計では、スレッドの安全性の問題がはるかに容易になりますことを検討してください。
ファーストクラスは、マルチスレッド環境に存在するかどうかを検討してください。そうでない場合、スレッドは安全と見なされていません。
その後、クラスは不変オブジェクト、または不変オブジェクトその事実として設計することができるかどうかを検討します。その場合は、スレッドセーフとはみなされません
最後に、スレッドセーフなクラスを設計するプロセス。
デザインスレッドセーフなクラスのプロセス:
図1に示すように、オブジェクトの状態を含むすべての変数を識別する。
図2に示すように、状態変数拘束不変条件を特定します。
3、同時アクセス管理ポリシーは、オブジェクトの状態を確立しました。