ダウンローダー クラスとアナライザー クラスの 2 つのクラスを使用する webcrawler を構築しています。プログラムの設計により、いくつかのメソッドを名前付きの静的クラスにアウトソーシングしましたutils
(リンク サフィックスの検索、いくつかの変数を指定してダウンロードする必要があるかどうかの決定など)。ある時点で複数のダウンローダーと複数のアナライザーがあるため、utils
クラス内の静的メソッドから間違った答えを得ることができるかどうか疑問に思っています。
たとえば、アナライザーがリンク サフィックスを知る必要があるとします。つまり、utils.getSuffix(link)
メソッドを使用しています。同時に、OS は何らかのリンク サフィックスを取得する必要があるダウンローダ スレッドに切り替え、再び を使用しますutils.getSuffix(link)
。ここで、OS は正しい応答を得られないアナライザー スレッドに戻ります。
- 私は正しいですか?
- 私が正しい場合、クラス
synchronized
のすべてのメソッドに追加する必要がありますか?utils
または、コードを複製していても、すべてのスレッドで関連するメソッドを使用して、そのようなシナリオを防ぐ必要がありますか?