クラス(String、StringBufferなど)の作成を考えていました。これは、マルチスレッド環境だけでなくシングルスレッド環境でも使用できます。開発者がどのような環境で使用しているのかわかりません。最悪の場合を想定して、同期できます。
ただし、 1. 同期によりパフォーマンスが低下します。2. 同期がないと、スレッドセーフではありません。
だから、私には2つの選択肢があります。
- クラスを非同期のままにしますが、このクラスを使用する開発者は、必要に応じてクラスを同期する必要があります。
- すべてのメソッドを同期して、パフォーマンスに影響を与えます。
私は、Java の多くの (すべてではないにしても、Vector に対する ArrayList など) クラスが最初のアプローチを取るように進化したことを見てきました。クラスでこれら 2 つのオプションを決定する前に、考慮すべきことは何ですか?
または、別の言い方をすれば、バーがマルチスレッド環境で使用でき、実行すべきではないことが確実にわかっている場合にのみ、「public void bar()」よりも「public synchronized void bar()」を使用する必要があります。同時に?
編集 したがって、明らかに、見出しで「ユーティリティクラス」という言葉を誤って使用しました。指摘してくれてありがとう、Jon Skeet。見出しから世界の「ユーティリティ」を削除しました。
例を挙げると、カウンターのようなクラスについて考えていました。カウンターは一例です。Counter を実装する方法は他にもあります。しかし、この質問は同期に関するものです。Counter オブジェクトは、何かが実行された回数を追跡します。ただし、シングルスレッドまたはマルチスレッド環境で使用できる可能性があります。では、カウンターでの同期の問題をどのように処理すればよいでしょうか。