ホームページ > Java > &#&チュートリアル > SimpleDateFormat はスレッドセーフですか?

SimpleDateFormat はスレッドセーフですか?

Patricia Arquette
リリース: 2024-12-06 22:04:11
オリジナル
760 人が閲覧しました

Is SimpleDateFormat Thread-Safe?

SimpleDateFormat のスレッドセーフの問題

Java はスレッドセーフなクラスで有名ですが、例外の 1 つは、スレッドを表示する SimpleDateFormat クラスです。 - 安全性への懸念。この理由を理解することは、マルチスレッド環境で効果的に日付を処理するために非常に重要です。

SimpleDateFormat は、書式設定および解析操作中に中間結果を保存するためにインスタンス フィールドに依存します。これにより、複数のスレッドが同じ SimpleDateFormat インスタンスに同時にアクセスする場合に脆弱性が発生します。スレッドは相互の計算に干渉し、不正確な結果が生じる可能性があります。

問題を示すコード例

次のコードは、SimpleDateFormat のスレッド セーフティの問題を示しています。

import java.text.SimpleDateFormat;

public class SimpleDateFormatDemo {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            try {
                // Thread 1 parses a date
                System.out.println(sdf.parse("2023-01-01"));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

        Thread t2 = new Thread(() -> {
            try {
                // Thread 2 formats a date concurrently
                System.out.println(sdf.format(new Date()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

        t1.start();
        t2.start();
    }
}
ログイン後にコピー

このコードでは、単一の SimpleDateFormat インスタンスを作成し、それを同時に使用します。 2つのスレッド。スレッド 1 は日付の解析を試行し、同時にスレッド 2 は日付のフォーマットを試行します。 SimpleDateFormat はスレッドセーフではない性質があるため、予期しない動作や誤った結果が発生する可能性があります。

FastDateFormat との比較

SimpleDateFormat とは異なり、FastDateFormat はスレッドセーフです。各スレッドに対して Calendar のスレッドローカル インスタンスを使用するため、インスタンス フィールドの共有の問題が排除され、スレッド セーフが確保されます。

結論

におけるスレッド セーフの問題SimpleDateFormat は、中間結果のインスタンス フィールドの使用に由来しています。マルチスレッド コンテキストで SimpleDateFormat を使用するには、ThreadLocal に配置するか、スレッドセーフな日付処理を提供する joda-time DateTimeFormat などの代替手段を使用するなど、慎重な管理が必要です。

以上がSimpleDateFormat はスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート