Webアプリケーションはどこで完全にスレッドセーフにする必要がありますか?
Webセキュリティの知識が気になり、先人からの返信が投稿の下にあることがわかりました。これは現在記録されているので、将来的に使用できることを願っています。
ASPやPHPと比較すると、サーブレット/ JSPテクノロジーは、マルチスレッド化された操作により、実行効率が高くなっています。サーブレット/ JSPは、デフォルトではマルチスレッドモードで実行されます。スレッドセーフを実現するには、次の3つのポイントを
実行します。1. SingleThreadModelインターフェースを実装する
このインターフェースは、システムが同じサーブレットへの呼び出しを処理する方法を指定します。このインターフェースでサーブレットが指定されている場合、このサーブレットのサービスメソッドは2つのスレッドによって同時に実行されません。もちろん、スレッドの安全性の問題はありません。など:
Public class Concurrent Test extends HttpServlet implements SingleThreadModel {
…………
}
2.共有データに対する操作
の同期同期されたキーワードを使用して、一度に1つのスレッドのみが保護セクションにアクセスできるようにします。
3.インスタンス変数
の使用を避けるこのインスタンスのスレッドセーフティの問題はインスタンス変数が原因であり、サーブレットのメソッドでインスタンス変数が使用されていない限り、サーブレットはスレッドセーフです。
ただし、サーブレットがSingleThreadModelインターフェースを実装している場合、サーブレットエンジンは新しいリクエストごとに個別のサーブレットインスタンスを作成するため、システムのオーバーヘッドが大きくなります。SingleThreadModelはServlet 2.4では昇格しなくなりました。
また、使用する共有データを保護するためにプログラムで同期を使用すると、システムのパフォーマンスが大幅に低下します。これは、同期されたコードブロックは一度に1つのスレッドでしか実行できないため、同時にクライアント要求を処理するスループットが低下し、多くのクライアントがブロッキング状態になるためです。さらに、メインメモリの内容とスレッドの作業メモリのデータの整合性を確保するために、キャッシュを頻繁に更新する必要があり、システムのパフォーマンスに大きな影響を与えます。したがって、実際の開発では、サーブレット内の同期コードも回避または最小化する必要があります。