スレッドに問題があります..
私は内部クラスを使用してルックアップを行っています..これを適切に行う方法について読んでおり、すべてがフィールドの使用を指しています..私の場合は「ブール検証」です。
基本的にオブジェクトがそこにある場合。フィールドを true と宣言し、値を返します。問題は、パフォーマンス テスト中に、同じオブジェクトの同じメソッドが複数のスレッドで同時に呼び出され、その結果がおかしくなることです。(私はpause()(10ミリ秒待つ)のために推測しています)
したがって、スレッドA..そこにオブジェクトがあるため、フィールドをtrueと宣言します..10ミリ秒待機します..スレッドBでは、オブジェクトはそこにありませんが、待機のため、同じフィールドがアクセスされているため、とにかくtrueを返します。
ここで困っています:(
これを行うためのより良い方法を知っている人はいますか?
boolean verify;
public boolean lookupAndVerify(String id) throws InterruptedException
{
final String key = id;
PastryIdFactory localFactory = new rice.pastry.commonapi.PastryIdFactory(env);
final Id lookupKey = localFactory.buildId(key);
Past p = (Past) apps.get(env.getRandomSource().nextInt(apps.size()));
p.lookup(lookupKey, new Continuation<PastContent, Exception>()
{
public void receiveResult(PastContent result)
{
P2PPKIContent content = (P2PPKIContent) result;
if(content !=null){
verify = true;
}
}
public void receiveException(Exception result)
{
System.out.println("Error looking up " + lookupKey);
}
});
pause();
return verify;
}