몇 가지 특정 시간마다 자주 업데이트해야하므로 java ExecutorService를 테스트하는 방법이 있지만 내 방법이 자주 업데이트되지 않는 이유를 알려주실 수 있습니까? ExecutorService가 자주 실행되지 않는 이유
이
내 수업 사전에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);
}
}
감사
FutureTask.java 있습니다.
그게 당신의 문제를 해결할 수 없지만 당신의'FutureTask' 클래스의 이름을 다른 것으로 바꿀 것을 제안합니다. 이것은 이미 java.util.concurrent 패키지에있는 클래스의 이름입니다. – assylias
이 코드는 작성된대로 이해가되지 않습니다. 일반적으로 별도의 스레드에서 작업 실행을 처리하려는 경우에는'ExecutorService'를 사용합니다. 이 경우 ExecutorService에 작업을 추가하지만 완료 될 때까지 주 스레드를 차단합니다. 확실히 그게 네가하려는 일이 아니야? 이것은 실행자 –
@ColinMorelli의 목적을 완전히 무마하고, 당신의 의견에 동의합니다. 제 프로덕션 코드에서 언급 한 그대로입니다. 그러나 시나리오를 표현하기 위해 간단한 독립 실행 형 프로그램을 사용하여 샘플을 복제했습니다. – Kiran