저는 비교적 새로운 ThreadPoolExecutor
입니다. 실행 시간을 으로 실행하기 전에을 실행하고 실행 후을 실행하면 이 실행되는 것을 볼 수 있습니다.ScheduledThreadPoolExecutor afterExecute의 runnable.toString이 다릅니다
runnable.toString()
을 사용하면 afterExecute(Runnable t, Throwable t)
을 사용합니다. 이제 로그를 실행 파일 자체에 넣을 수 있다는 것을 알았지 만,이 방법이 무엇을 만들지 궁금했습니다.
ThreadPoolExecutor
의 경우 runnable.toString
은 execute(runnable)
과 afterExecute()
전에 동일하게 작동합니다.
그러나! ScheduledThreadPoolExecutor
이 다릅니다. 그것의 Execute의 runnable.toString은 전혀 다른입니다. 전에 예를 들어
: [email protected]
, afterExecute는 : java.[email protected]zxc
조차 PKG 이름은 동일합니다. 이유가 무엇인가요?
private MyThreadPool() {
threadPool = new ThreadPoolExecutor(NUMBER_OF_CORES, MAX_CORES,
KEEP_ALIVE_TIME, KEEP_ALIVE_TIME_UNIT, workQueue) {
@Override
public void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
Log.d(TAG, "ThreadOps onDone: " + r.toString());
// (A) will return same --> [email protected]
}
};
threadPool.setRejectedExecutionHandler(rejectedHandler);
scheduledThreadPool = new ScheduledThreadPoolExecutor(NUMBER_OF_CORES) {
@Override
public void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
Log.d(TAG, "ThreadOps onDelayDone: " + r.toString());
// (D) does not return same?
// I am expecting --> [email protected] , but get...
// java.[email protected]zxc
}
};
scheduledThreadPool.setRejectedExecutionHandler(rejectedHandler);
}
public void execute(Runnable runnable) {
Log.d(TAG, "ThreadOps exe: " + runnable.toString());
// (A) lets say toString --> [email protected]
threadPool.execute(runnable);
}
public void delayExecute(Runnable runnable, long delayms) {
Log.d(TAG, "ThreadOps exe @" + delayms + ": " + runnable.toString());
// (D) lets say toString --> [email protected]
scheduledThreadPool.schedule(runnable, delayms, TimeUnit.MILLISECONDS);
}
고맙습니다. 그래서 다른 클래스에서 변형 된 다음 거기에서 execute'd가 발생하여 toString이 완전히 변경된 이유가 설명됩니다. – TWL