現時点では単一のスレッドでのみ使用されるクラスを作成する場合、現時点では必要がなくても、それらをスレッドセーフにする必要がありますか? 後でこのクラスを複数のスレッドで使用する可能性があり、その時点で競合状態が発生する可能性があり、最初にクラスをスレッドセーフにしなかった場合、競合状態を見つけるのに苦労する可能性があります。または、パフォーマンスを向上させるために、クラスをスレッドセーフではないものにする必要がありますか? しかし、時期尚早の最適化は悪です。
別の質問: 必要に応じてクラスをスレッドセーフにする必要がありますか (複数のスレッドで使用する場合、そうでない場合)、必要に応じてこの問題を最適化する必要がありますか (同期が処理時間の重要な部分を消費することがわかっている場合)?
両方の方法のいずれかを選択した場合、デメリットを軽減する方法はありますか? または、使用する必要がある 3 番目の可能性はありますか?
編集:この質問が頭に浮かんだ理由を述べます。当社では、データをプロパティ ファイルに書き込む非常に単純なユーザー管理を作成しました。私はそれをWebアプリで使用しましたが、いくつかの作業を行った後、ユーザー管理がユーザーのプロパティ(名前とパスワードを含む)とロールを忘れたという奇妙なエラーが発生しました。それは非常に厄介でしたが、一貫して再現可能ではなかったので、競合状態だったと思います. ディスクからの読み取りとディスクへの書き込みのすべてのメソッドを同期したので、問題はなくなりました。そもそも同期を使ってクラスを書いていれば、おそらくすべての面倒を避けることができたのではないかと思いましたか?
EDIT 2 : Pragmatic Programmer のヒントを見ていると、ヒント #41: Always Design for Concurrency を見ました。これは、すべてのコードがスレッド セーフであるべきだと言っているわけではありませんが、並行性を念頭に置いて設計する必要があることを示しています。