私は比較的新しいThreadPoolExecutor
です。私は、実行可能ファイルを追跡することができるかどうかを確認する前に、を実行し、を実行した後にを実行します。Executeのrunnable.toStringの後にScheduledThreadPoolExecutorがあります
runnable.toString()
をafterExecute(Runnable t, Throwable t)
を使用して取得することによって。さて、私はログをrunnable自体の中に入れることができることを理解しています...しかし、私はこの方法が何を生み出すのか不思議でした。
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