java线程池执行器和Android的线程优先级
我想制作一个ThreadPollExecutor,它执行具有给定优先级的任务Process.setThreadPriority(int)
我该怎么做?是否在发送到线程轮询的每个runnable的开始处添加对setThreadPriority的调用?我还考虑过使用如下自定义线程工厂:
private final static class ProcessPriorityThreadFactory implements ThreadFactory {
private final int threadPriority;
public ProcessPriorityThreadFactory(int threadPriority) {
super();
this.threadPriority = threadPriority;
}
@Override
public Thread newThread(Runnable r) {
return new Thread(new PriorityChangeWrapper(r, threadPriority));
}
private final static class PriorityChangeWrapper implements Runnable {
private final Runnable originalRunnable;
private final int threadPriority;
public PriorityChangeWrapper(Runnable originalRunnable, int threadPriority) {
super();
this.originalRunnable = originalRunnable;
this.threadPriority = threadPriority;
}
@Override
public void run() {
Process.setThreadPriority(threadPriority);
originalRunnable.run();
}
}
}
这个问题的最佳解决方案是什么?谢谢
# 1 楼答案
您问题中给出的定制工厂是正确的方法。工厂模式的使用正是出于这个原因,因为它使您能够完全控制由
ExecutorService
创建的所有线程。(例如,您还可以更改线程名称等)您的工厂实施比需要的复杂得多,但您只需要: