我有一个 InstanceFactory
类,它创建某个类的实例,我们将其称为 instance
类。这些实例是在 main()
方法中创建的。在此实例类上,我目前进行诸如 instance.init()
、instance.put()
、instance.stop()
之类的调用。
由于所有内容都在单个线程中运行,并且我发现了一些性能问题,因此我想尝试在单独的线程中运行实例。
我必须对实例类进行哪些更改才能让它在单独的线程中运行?我仍然可以调用同样的电话吗? instance.init()
?
更新(添加代码):
InstanceFactory instanceFactory = new InstanceFactory();
try (Instance instance = instanceFactory.create()) {
instance.init();
instance.doStuff();
while ((input = reader.readNext()) != null) {
instance.put(input);
}
}
实例应该在自己的线程中运行。
最佳答案
Executors.newSingleThreadExecutor()
仅创建一个工作线程,因此您将拥有一个主线程+ 一个工作线程 具有 post()
任务的 FIFO 队列。如果您的 post()
方法是线程安全,您应该使用 Executors.newCachedThreadPool()
来根据需要创建如此多的线程。
InstanceFactory instanceFactory = new InstanceFactory();
ExecutorService executor = Executors.newCachedThreadPool();
try (Instance instance = instanceFactory.create()) {
instance.init();
instance.doStuff();
while ((input = reader.readNext()) != null) {
executor.execute(new Runnable() {
@Override
public void run() {
instance.put(input);
}
});
}
} finally {
executor.shutdown();
}
我建议您阅读official documentation和一些guides关于ExecutorService。
关于java - 在自己的线程中执行类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315314/