我有一个带有主类的应用程序,它为一些其他可运行的类设置了一个线程执行器,但是我希望定期调用主类中的更新方法,所以最好创建一个类似示例的线程下面或者将类提交给在其中声明的线程执行器(类似于示例中的示例)?
使用混合的线程执行程序和启动标准线程感觉不对。
使用标准线程调用进行主类更新?
公共课测试{
private ScheduledExecutorService scheduledThreadPool; //used for creating other threads
private Thread t;
public Test() {
t = new Thread() {
@Override
public void run() {
try {
while (true) {
processUpdates();
Thread.sleep(10);
}
} catch (InterruptedException e) {
logger.error(e);
}
}
};
}
private void processUpdates() {
//do some stuff
}
}
或者使用线程执行器不只是其他可运行的类而是主类本身吗?
public class Test实现runnable {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
public Test() {
scheduledThreadPool.scheduleWithFixedDelay(this, 0, 10, TimeUnit.MILLISECONDS);
}
@ Override
public void run() {
processUpdates();
}
private void processUpdates() {
//do some stuff
}
}
谢谢!
答案 0 :(得分:0)
始终在普通旧线程上使用线程池:它可以让您更好地控制线程的执行。
如果您希望所有线程并行运行,则可以始终使用无限制的线程池,因为Thread
内存成本高昂,所以不鼓励这样做。
在您的情况下,更推荐使用ScheduledExecutorService
,因为它避免了线程实现中的sleep
指令。它提供了更好的性能和更好的可读性。