我在A类中有一个方法a,它在类B中调用n次@Asynchronous方法b,在类C中调用@Asynchornous方法c。
我想通过Future同步所有,但是当方法b调用方法C.c时我有一个死锁。
你有什么想法吗?
非常感谢你
安吉洛enter code here
编辑
A类: @辛格尔顿 公共类StatesPoller {
@Lock(LockType.READ)
private void scheduledTimeout() {
//qmList list with n elements
Collection<Future<QueueManager>> futures = new ArrayList<Future<QueueManager>>();
for (QueueManager qm : qmList) {
if (qm.getQueueManagerStates().get(0)
.getConnectionFails() == 0) {
futures.add(statesPollerUtility.runStateComputation(
qm, df));
}
}
}
B类
@Singleton
@Lock(LockType.READ)
public class StatesPollerUtility {
@Asynchronous
public Future<QueueManager> runStateComputation(QueueManager qm, SimpleDateFormat df) {
Date startDate = new Date();
QueueManagerState queueManagerState = qmService.getQueueManagerStateByQM(qm);
qmService.setLastPollerStartDate(queueManagerState, qm, new Date());
final Future<Void> queueLocalStateComputation = queueLocalStatesUtility.runQueueLocalStateComputation(qm, df);
queueLocalStateComputation.get();
}
}
C班
@Singleton
@Lock(LockType.READ)
public class QueueLocalStatesUtility {
@Asynchronous
public Future<Void> runQueueLocalStateComputation(QueueManager qm,
SimpleDateFormat df) {
//do something
}
}
答案 0 :(得分:0)
你完成后在每种方法中返回什么,你应该返回一个未来&#34;返回新的AsyncResult&lt;&gt;&#34;为什么你需要锁?尝试添加返回并摆脱锁定。如果一个线程1锁定B,而线程2锁定C.线程2以便将来返回B需要该线程1释放B,但B只会释放B当C将被线程2释放时,所以DEADLOCK。