【发布时间】:2015-06-05 08:29:07
【问题描述】:
创建线程时可以记录。我们需要有一个自定义的ThreadFactory 实现,所有线程都将从该实现中创建,并且我们可以从newThread 方法记录它。但是如果我们需要在线程被销毁和删除时记录日志,我们该怎么做呢?
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.log4j.Logger;
public enum MyThreadFactory implements ThreadFactory {
INSTANCE;
private final AtomicInteger poolNumber = new AtomicInteger(1);
private final Logger logger = Logger.getLogger(getClass());
private final ThreadGroup threadGroup;
private final AtomicInteger threadNumber = new AtomicInteger(1);
private final String namePrefix;
private RpiThreadFactory() {
SecurityManager securityManager = System.getSecurityManager();
threadGroup = (securityManager != null) ? securityManager.getThreadGroup() : Thread.currentThread().getThreadGroup();
namePrefix = "RpiPool-" + poolNumber.getAndIncrement() + "-Thread-";
}
public Thread newThread(Runnable runnable) {
Thread thread = new Thread(threadGroup, runnable, namePrefix + threadNumber.getAndIncrement(), 0);
thread.setPriority(Thread.NORM_PRIORITY);
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable cause) {
logger.error(cause.getMessage(), cause);
}
});
logger.debug(thread.toString() + " created.");
return thread;
}
}
【问题讨论】:
-
您是否尝试使用自己的线程池?是否存在您需要管理自己的线程池的有效案例?
-
“当线程被删除时”是什么意思?从哪里/什么删除?
-
你可以返回而不是返回
WorkerThread extends Thread并且在完成时有一个对MyThreadFactory的回调
标签: java multithreading lifecycle