【发布时间】:2020-03-22 23:43:37
【问题描述】:
我正在解决一个问题,我将任务发布到每个实例的执行程序中,一旦它的工作结束,实例就会从内存中清除,我在一系列强制垃圾收集后进行了内存转储,但可以找不到任何持有执行人的人的实例。但是我仍然可以看到 executor 创建的线程仍然存在于 CPU 中,但处于睡眠状态,并且在应用程序生命周期内一直存在,我不知道如何清除它或将其从 CPU 中删除。
这种情况并非每次都发生,有时它会从内存中清除,有时不会。但主要是它正在被清除。但如果这种情况继续发生,那么设备最终可能会导致 OutOfMemory(OOMs) 崩溃,因为它无法创建更多线程。
我尝试在执行程序上调用 shutdown() 方法,但似乎也不起作用。
class MyThread extends Thread {
MyThread(Runnable r, String name) {
super(r, name);
}
}
class YourThreadFactory implements ThreadFactory {
int thread = -1;
YourThreadFactory() {
}
@Override
public Thread newThread(@NonNull Runnable r) {
thread = SomeStaticClass.thread++;
return new MyThread(r, "MyThread " + thread);
}
@Override
protected void finalize() throws Throwable {
super.finalize();
Log.d("ThreadFactory", Thread.currentThread().getName() + " " + " Executor removed " + thread);
}
}
ExecutorService mSingleThreadExecutor = Executors.newSingleThreadExecutor(new YourThreadFactory());
【问题讨论】:
标签: java android multithreading executorservice threadpoolexecutor