0

特定の時間ごとに頻繁に更新する必要があるメソッドがあるため、Java ExecutorService をテストしていましたが、メソッドが頻繁に更新されていません。理由を教えてください。

これらは私のクラスです

FutureTask.java

package com;

import java.lang.reflect.Method;
import java.util.concurrent.*;

public class FutureTask {
    private static ExecutorService executor = Executors.newCachedThreadPool();
    private static FutureTask _instance = new FutureTask();

    public static FutureTask getInstance() {
        return _instance;
    }

    private static int timoutsec = 15;

    public Object submiteTask(final Object obj, final Method method,
            final Object[] params) throws Exception {
        return submiteTask(obj, method, params, -1);
    }

    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) {
                    }
                    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);
                }
                return result;
            } catch (TimeoutException e) {
            } catch (Exception e) {
            } finally {
                future.cancel(true);
            }
        }
        return null;
    }

    public static void main(String args[]) {
        try {
            FutureTask.getInstance().submiteTask(
                    new TestingFutureTaskUtil(),
                    TestingFutureTaskUtil.class.getDeclaredMethod(
                            "updateMethodCalled",
                            new Class<?>[] { String.class }),
                    new Object[] { "UBSC!OC1010" }, 1);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

TestingFutureTaskUtil.java

package com;

public class TestingFutureTaskUtil {

    public void updateMethodCalled(String symbol) {

        System.out.println("updateMethodCalled" + symbol);

    }

}

前もって感謝します 。

4

2 に答える 2

1

ジョブは 1 つしか送信しないため、updateMethodCalled は 1 回だけ呼び出されます。

于 2013-07-11T12:45:27.597 に答える