[解決済み] ユーティリティ静的メソッドのスレッドセーフを確保するには?
質問
アプリケーションのさまざまなユーティリティクラスで使用される静的メソッドのスレッドセーフを確保するための、一般的な方法やルールはありますか? ここでは、特に Web アプリケーションのスレッドセーフを指摘したいと思います。
Immutable Objectsをパラメータとする静的メソッドはスレッドセーフであり、Mutable Objectsはそうでないことはよく知られています。
を操作するためのユーティリティメソッドがあるとします。
java.util.Date
のインスタンスを受け取り、そのメソッドが
java.util.Date
のインスタンスを受け取る場合、このメソッドはスレッドセーフではありません。では、パラメータ渡しの方法を変えずにスレッドセーフにするにはどうしたらよいでしょうか。
public class DateUtils {
public static Date getNormalizeDate(Date date) {
// some operations
}
}
また、クラス
javax.faces.context.FacesContext
はミュータブルですか?このような静的なユーティリティメソッドにこのクラスのインスタンスを渡すことはスレッドセーフですか?
パラメータとして渡すことができる、またはできないクラスのインスタンスのリストは長くなる可能性があります。
どのように解決するのか?
immutableなオブジェクトをパラメータとする静的メソッドはスレッドセーフであり、mutableなオブジェクトはスレッドセーフでないことはよく知られています。
私はこれに異議を唱えたい。メソッドに渡された引数はスタックに格納され、これはスレッドごとのイディオムです。
もしパラメータが
Date
のような変更可能なオブジェクトである場合、他のスレッドが他の場所で同時にそれを変更しないようにする必要があります。しかし、これはメソッドのスレッドセーフとは関係ない別の問題です。
あなたが投稿したメソッドはスレッドセーフです。それは状態を維持せず、その引数に対してのみ動作します。
を読むことを強くお勧めします。 Java並行処理の実践 または、Java のスレッドセーフに特化した同様の本を読むことを強くお勧めします。これは複雑なテーマであり、StackOverflow のいくつかの回答で適切に対処することはできません。
関連
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
Jsoup-Crawlingの動作
-
java マイクロソフト払い戻し予期せぬサーバーからのファイルの終了
-
アノテーション「@Retention」の役割
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
ApiModel と @ApiModelProperty の使用法
-
[解決済み] Javaインターフェースでスタティックメソッドを定義できないのはなぜですか?
-
[解決済み】静的なMapを初期化する方法は?
-
[解決済み] Javaで静的メソッドからgetClass()を呼び出す方法は?
-
[解決済み] 同期化された静的メソッドはJavaでどのように動作し、Hibernateエンティティの読み込みに使用できますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
Junitのユニットテストはjava.lang.Testを報告します。
-
keytool error: java.io.FileNotFoundException: cacerts (アクセス拒否されました。)
-
ジャバアレイ
-
X11 DISPLAY変数が設定されていない」問題の解決方法
-
代入の左辺は変数でなければならない 解答
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Java基礎 - マッピングとQ/A
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集