gpt4 book ai didi

java - 线程自行停止

转载 作者:行者123 更新时间:2023-12-01 23:30:02 26 4
gpt4 key购买 nike

我一直在寻找解决方案,但一直找不到,所以我会在这里提出我的问题。我有一个线程,该线程在程序启动时启动,并且在应用程序启用它之前应该处于空闲状态。简单代码示例:

private class UpdaterThread extends Thread {

private static final int UPDATE_RATE = 50;
private Timer updateTimer = new Timer();

private boolean enabled;

public void run() {

while (!closeRequested) {

// If this is uncommented, the thread works as it's supposed to.
// System.out.print("");

if (enabled) {

Snapshot next = getNextSnapshot(1f / UPDATE_RATE);
System.out.println("Got next Snapshot");
updateTimer.sync(UPDATE_RATE);
System.out.println("Push");
currentSnapshot = next;
}
}
}

public void enable() {

enabled = true;
}

public void disable() {

enabled = false;
}
}

最佳答案

当您读取 JIT 认为您未修改的变量时,它会内联该值。如果稍后再修改该值,则为时已晚,该值已嵌入到代码中。

避免这种情况的一个简单方法是使用 volatile ,但您仍然会遇到问题,因为线程正忙于等待值更改,并且似乎没有充分的理由做这个。另一种选择是添加混淆 JIT 的代码,它不会执行此优化。一个空的同步块(synchronized block)就足够了,但更友好的方法是使用 Thread.sleep(),它至少不会耗尽所有的 CPU。

我建议使用 volatile 字段并 hibernate 10-100毫秒的时间。然而,一个更简单的选择是在需要时才启动线程。

关于java - 线程自行停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19471640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com