2

ダウンローダー クラスとアナライザー クラスの 2 つのクラスを使用する webcrawler を構築しています。プログラムの設計により、いくつかのメソッドを名前付きの静的クラスにアウトソーシングしましたutils(リンク サフィックスの検索、いくつかの変数を指定してダウンロードする必要があるかどうかの決定など)。ある時点で複数のダウンローダーと複数のアナライザーがあるため、utilsクラス内の静的メソッドから間違った答えを得ることができるかどうか疑問に思っています。

たとえば、アナライザーがリンク サフィックスを知る必要があるとします。つまり、utils.getSuffix(link)メソッドを使用しています。同時に、OS は何らかのリンク サフィックスを取得する必要があるダウンローダ スレッドに切り替え、再び を使用しますutils.getSuffix(link)。ここで、OS は正しい応答を得られないアナライザー スレッドに戻ります。

  1. 私は正しいですか?
  2. 私が正しい場合、クラスsynchronizedのすべてのメソッドに追加する必要がありますか? utilsまたは、コードを複製していても、すべてのスレッドで関連するメソッドを使用して、そのようなシナリオを防ぐ必要がありますか?
4

1 に答える 1

2

これは、メソッドの実装に完全に依存します。メソッドがローカル変数のみを使用し、指定したパラメーターに基づいて接尾辞を決定する場合、すべて問題ありません。別のスレッドからアクセスできるリソースが必要になるとすぐに (ローカル変数とパラメーターはそうではありません)、同期について心配する必要があります。

独自のパラメーター以外は何も必要としないユーティリティとして statics を使用しているように思えます。だからあなたは安全であるべきです:)

于 2013-01-23T12:18:25.590 に答える