私の場合、特定のメソッドは、同期と非同期のモードベースで条件に基づいて実行されます。いくつかの条件で同期モードと非同期モードを切り替える
私がしているのは、スイッチを行うためにreentrantlockを使用することです。コードは以下のようになります。
private Lock modeLock = new ReentrantLock(true);
public void specialMethod(boolean condition)}
Callable<Result> c =() -> {
if(condition)
modeLock.lock();
else{
try {
modeLock.tryLock(1, TimeUnit.DAYS);
} catch (InterruptedException e) {
} finally {
modeLock.unlock();
}
//do something here
if(condition)
modeLock.unlock();
return result;
};
pool.submit(c);
}
それは私のために働くが、非常にばかばかしいようだ。私はReentrantLockからConditionによって改善できると思うが、何の手がかりもない。どのようにそれを改善する方法を教えてもらえますか? Thx
だから、時にはそれがスレッドセーフだと言って、時にはしていませんか?それは奇妙に聞こえる。 – Kayaman
@Kayamanはい。それは強いですが、私たちの実際のケースで発生します。特別なアクションによっては、すべての場合のプロセス結果に影響を与える場合があります。このような要求を処理する必要があります。 – Roy
これが私のコードベースであれば、私は実際の問題を解決しようとします。これは単に症状を修正しているようです。 「ハーフスレッドセーフ」というコードは、より深い設計上の問題のようです。 – Kayaman