Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 线会自动停止_Java_Multithreading - Fatal编程技术网

Java 线会自动停止

Java 线会自动停止,java,multithreading,Java,Multithreading,我一直在寻找一个解决方案很长一段时间,但我没有找到一个,所以我会在这里问我的问题。 我有一个线程,它是在程序启动时启动的,在应用程序启用之前应该是空闲的。简单代码示例: private class UpdaterThread extends Thread { private static final int UPDATE_RATE = 50; private Timer updateTimer = new Timer(); private boolean enable

我一直在寻找一个解决方案很长一段时间,但我没有找到一个,所以我会在这里问我的问题。 我有一个线程,它是在程序启动时启动的,在应用程序启用之前应该是空闲的。简单代码示例:

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的代码,因为它不进行这种优化。一个空的同步块就足够了,但更友好的方法是使用Thread.sleep(),它至少不会耗尽所有的CPU


我建议使用一个
volatile
字段,睡眠时间为10-100毫秒。但是一个更简单的选择是在需要之前不要启动线程。

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

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


我建议使用一个
volatile
字段,睡眠时间为10-100毫秒。但是一个更简单的选择是在需要之前不要启动线程。

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

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


我建议使用一个
volatile
字段,睡眠时间为10-100毫秒。但是一个更简单的选择是在需要之前不要启动线程。

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

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

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

由于在启动线程时调用run(),因此您可以等到程序中的稍后时间再启动它,线程也不会扩展“thread”,而是实现“Runnable”因此,类定义如下所示:

public class UpdaterThread implements Runnable
希望它有帮助:D

由于在线程启动时调用run(),因此您可以等到程序中的稍后时间再启动它,而且线程不扩展“thread”,而是实现“Runnable”,因此类定义如下所示:

public class UpdaterThread implements Runnable
希望它有帮助:D

由于在线程启动时调用run(),因此您可以等到程序中的稍后时间再启动它,而且线程不扩展“thread”,而是实现“Runnable”,因此类定义如下所示:

public class UpdaterThread implements Runnable
希望它有帮助:D

由于在线程启动时调用run(),因此您可以等到程序中的稍后时间再启动它,而且线程不扩展“thread”,而是实现“Runnable”,因此类定义如下所示:

public class UpdaterThread implements Runnable

希望它能有所帮助:D

一个多线程解决方案,可避免的轮询仍然存在,但总的CPU浪费被延迟增加的sleep()循环所取代。有时,我想知道为什么操作系统/语言会为所有这些sycnro原语和包装器而烦恼。你有183k代表,你建议一个sleep()循环?@MartinJames一个sleep循环是最简单的改变。我建议在你想让线程运行之前不要运行它。一个多线程解决方案,可以避免的轮询仍然存在,但是总的CPU浪费被延迟增加的sleep()循环所取代。有时,我想知道为什么操作系统/语言会为所有这些sycnro原语和包装器而烦恼。你有183k代表,你建议一个sleep()循环?@MartinJames一个sleep循环是最简单的改变。我建议在你想让线程运行之前不要运行它。一个多线程解决方案,可以避免的轮询仍然存在,但是总的CPU浪费被延迟增加的sleep()循环所取代。有时,我想知道为什么操作系统/语言会为所有这些sycnro原语和包装器而烦恼。你有183k代表,你建议一个sleep()循环?@MartinJames一个sleep循环是最简单的改变。我建议在你想让线程运行之前不要运行它。一个多线程解决方案,可以避免的轮询仍然存在,但是总的CPU浪费被延迟增加的sleep()循环所取代。有时,我想知道为什么操作系统/语言会为所有这些sycnro原语和包装器而烦恼。你有183k代表,你建议一个sleep()循环?@MartinJames一个sleep循环是最简单的改变。我建议在你需要之前不要运行线程