【发布时间】:2017-03-20 07:16:30
【问题描述】:
我有一个简单的(或者至少我认为是)Java 应用程序,它在线程中执行一些工作。
类似:
public class Task implements Runnable {
public boolean running = false;
public void run() {
running = true;
// long running processing
}
}
...
void startTask() {
Task task = new Task();
Thread thread = new Thread(task);
thread.start();
// I added this thinking the calling thread might terminate before
// the new thread starts
while (!task.running) {
try {
Thread.sleep(1);
} catch (InterruptedException ie) {
// log error
}
}
startTask() 上面的调用是为了响应 REST 请求(这是一个 Spring Boot 应用程序)。它在我的开发机器(Windows 10,Oracle JDK)和 Amazon EC2 实例(Amazon Linux,OpenJDK)上运行良好,但在 Google Compute 实例(Ubuntu 16.04,OpenJDK)上运行良好。在后一种情况下,工作线程要么永远不会启动(task.running 永远不会设置为 true),要么它有时会在 60+ 秒后启动。我很困惑。
鉴于任务本身并不是很复杂(加上设置“运行”标志是它所做的第一件事,而且这从未发生过)让我认为这是一些奇怪的 JVM/系统相关问题,但是我真的不知道。
最令人沮丧的是它有时可以工作(通常是我在重建后第一次上传/运行它时)。并且从来没有在我的电脑上工作失败过。
编辑:我曾尝试在 Ubuntu 中使用 Oracle JRE,但同样没有成功。
第二次编辑:是的,我在这里编写示例代码时犯了一些错误。固定。
【问题讨论】:
标签: java multithreading spring-boot