私のアプリケーションには、 run メソッド while(true) 条件の下の Thread がこの OPeration を実行するシナリオがあります。
while true の状態では、外部データ ソース (Memcache) から継続的に情報をフェッチし、新しくログインしたユーザーまたはログアウトしたユーザーに応じてコンテンツを追加/削除し、最後に Memcache に更新します。
コードのスニペット
public class MonitoringThread extends Thread
{
public void run() {
while(true)
String response = Memcache.get("USERINFO");
// Some checks will be made on response and builds a new response and updates back to Memcache .
synchronized (response)
{
Memcache.set("USERINFO" , response) ;
}
}
}
私の質問は
設定操作で同期ブロックを保持しました (これは正しいですか)、または取得操作の実行中に行う必要がありますか??
Synchronied ブロックに渡されるパラメーターは、これが this (クラス自体) であるか、String 応答であるかに関係なく、
いくつかの詳細情報。
アプリケーションは、ロード バランサーによって制御される 5 つの Web サーバー インスタンスで実行されます。(これらの 5 つのインスタンスはすべて、操作と更新データを取得するために実行されます)
あなたのアイデアを共有してください。
読んでくれてありがとう、素晴らしい一日を。
編集部分
返信ありがとうございます。
同期ブロック パラメータを変更しました。以下の実行可能なアプローチを教えてください。
オプション1
スレッドで同期ブロックを使用する
synchronized (Memcache.class)
{
Memcache.set("USERINFO" , response) ;
}
class Memcache
{
public static boolean set(String key, Object value) {
MemcacheClient.set(key, 0, value);
}
または
Memcache クラス自体で Synchronied ブロックを使用する
class Memcache
{
synchronized (Memcache.class)
{
public static boolean set(String key, Object value) {
MemcacheClient.set(key, 0, value);
}
// その他のメソッド }