为什么@PostConstruct方法只能启动一个线程?
@Component
class Type
{
@PostConstruct
private void postConstructor() {
Runnable threadAlpha = () -> {
while (true) {
workWithSomething();
try {
Thread.sleep(1000 * 60);
} catch (InterruptedException e) {
}
}
};
Runnable threadBeta = () -> {
while (true) {
workWithOtherthing();
try {
Thread.sleep(1000 * 3);
} catch (InterruptedException e) {
}
}
};
threadBeta.run();
threadAlpha.run();
}
}
对于spring framework,我正在努力处理这段代码,问题是只有一个线程可以实际启动,首先调用run()
,如果我将位置切换为如下所示,则另一个线程似乎冻结:
threadAlpha.run();
threadBeta.run();
那么threadBeta从未开始,为什么会发生这样的事情
# 1 楼答案
当您调用
threadAlpha.run()
和threadBeta.run()
时,您正在当前线程中执行它。对于在新线程中的简单执行,您可以使用:来自Oracle的教程
# 2 楼答案
当你在呼叫threadBeta时。运行()。run()您正在调用一个具有无限循环的方法。您没有创建线程。这就是为什么threadAlpha。run()即使是threadBeta也没有执行。run()处于无限循环中。相反,你可以这样做:
# 3 楼答案
因为你没有创建线程。而不是创建
Runnable
实例,然后运行它们的run
方法而是这样做:
# 4 楼答案
Runnable run()在当前线程中执行,因此该行为也随之发生。如果要在两个独立的线程中运行,请使用
Thread
并在这些线程上调用start
: