0

私はこのようにコードを持っています。

1)リフレクションを使用してupdatedbメソッドを呼び出す...

for (String uniqueSym : activeSymbolsSet) {
    futureTaskUtil.submiteTask(new Helper(),
    Helper.class.getDeclaredMethod("updateDb", 
           new Class<?>[] { String.class }), new Object[] { uniqueSym }, 60);
}

--futureTaskUtil:

2)私の質問は、このupdatedbがランタイムタスクとして実行されることです...

public Object submiteTask(final Object obj, final Method method, final Object[] params, int timeoutSeconds) throws Exception {
    if (null != obj && method != null) {
        Callable<Object> task = new Callable<Object>() {
        public Object call() {
            try {
                method.setAccessible(true);
                Object resultObj = method.invoke(obj, params);
                return resultObj;
            } catch (Exception e) {
                logger.fatal("Exception occured while invoking future task.", e);
            }
            return null;
        }
    };
    Future<Object> future = executor.submit(task);
    try {
        Object result = null;
        if (timeoutSeconds < 0) {
            result = future.get(timoutsec, TimeUnit.SECONDS);
        } else {
            result = future.get(timeoutSeconds, TimeUnit.SECONDS);
        }
        logger.info("Result of method execution is  :: " + result);
        return result;
    } catch (TimeoutException e) {
    } catch (Exception e) {
        logger.fatal("Exception occured while executing future tas : " + obj, e);
    } finally {
        future.cancel(true); // may or may not desire this
    }
}
return null;
}

これが別のタスクとして実行され、メソッドを呼び出す理由を誰かが説明できますか?

4

2 に答える 2

0

Future<Object> future = executor.submit(task);これはあなたの犯人ですあなたはここでExecuterFrameworkについて読むことができます

于 2012-09-10T11:31:21.907 に答える
0

メソッドが返されない場合はどうなりますか?その場合、アプリケーションはこの時点でハングします。このラッパーを使用すると、メソッドは60秒後にキャンセルされます。

于 2012-09-10T11:39:15.107 に答える