Sevletスレッド安全性の問題

個人的にすべてのものは避けられない記録されたときに勉強は好きではない、私はライン上の唯一の重要な記録、短い練習して、他はすぐに思い出すことができると思います。スレッド安全性の問題Sevletについてここで記録。

まず、クライアントは、クライアントの要求は、プロセスによって同じSevletの複数のインスタンスであることを意味し、Sevletオブジェクトを作成するためのリクエストを送信するだけで、初めてSevletエンジンを理解しますだから、今回の2つのケースがあります。

1.ローカル変数にアクセスするための要求は、ローカル変数がスレッドの一部である場合、すべてのローカル変数は独立しているので、何のセキュリティ上の問題が、ありません

2.スレッドの安全性の問題があり、変数はこのsevletオブジェクトの一部であることを、グローバル変数にアクセスするための要求は、すべてのスレッドが独立していない、変更することができた場合は、この時間。同時アクセスは、要求は、一時変数の値は、Bの要求を変更し、一時変数の値を変更することができる場合、その要求は、変数の値を得るために、変数の値を取得するためにBの要求は、それが起こるべきでない、Aなぜなら、取得Bの要求値は2回交換されています。ソリューション:

(1):使用すると、コードにロック付きの変数を変更するには同期なので、Bは、あなたが正しい値に得ることができるので、リクエストが処理された後に処理される要求を待たなければならないだろうが、非常にこのような問題がありますすべての要求は、この方法で時間があまりにもかかり、キュー、FIFOは、要求が1ずつ処理しなければならない形成することになります。

(2):SingleThreadModelをインターフェイスを実装し、それがシングルスレッドモードの処理となり、スレッドごとSevletインスタンスを作成し、この感覚は、本質的な問題を解決しないが、インスタンスは20、最大でも最大の数で作成もっと、もっと、あなたが中断、他はそれを言った、それが作成されたとき、sevletは、まず、元をロードし、それはないが、シングルスレッド(SignleThreadModel)、新しく作成されたインスタンスには、その後ではないsevletが作成しているかを決定します例は、これが継承されたSingleThreadModelをインタフェースは複数のインスタンスを作成することができるようになります理由です。

しかし、これは本当にスレッドの安全性の問題を解決しないと、この方法はまた、廃止されました。

要約すると、あなたは理解していない,,同期、スレッドセーフではありませんsevlet見るので、グローバル変数を設計回避しようと、そう本当にある、上記の2つのメソッドを使用することができます。

 

おすすめ

転載: www.cnblogs.com/eenio/p/11231162.html