@Asyncronous future方法死锁

时间:2014-11-17 16:03:27

标签: future

我在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
    }
}

1 个答案:

答案 0 :(得分:0)

你完成后在每种方法中返回什么,你应该返回一个未来&#34;返回新的AsyncResult&lt;&gt;&#34;为什么你需要锁?尝试添加返回并摆脱锁定。如果一个线程1锁定B,而线程2锁定C.线程2以便将来返回B需要该线程1释放B,但B只会释放B当C将被线程2释放时,所以DEADLOCK。