java - 后台线程不起作用,但使用简单的 'System.out' 就可以了

标签 java multithreading

奇怪的事情。如果条件desiredHealth < p.getFakeHealth(),下面的代码有效是真的,它确实有作用。

     @Override
     public void run(){
        while(game_running){
            System.out.println("asd");
            if(desiredHealth < player.getFakeHealth()){
             DOES SOMETHING
          }
        }

但是...如果没有“System.out”,它就无法工作。它不检查条件。 它在某种程度上处于较低的优先级,或者其他什么。

     @Override
     public void run(){
        while(game_running){
            if(desiredHealth < player.getFakeHealth())
             DOES SOMETHING
          }
        }

我是线程新手,所以请不要对我大喊大叫:)

仅供引用,该线程是一个“扩展线程”的普通类,是的 - 它正在运行。而且“game_running”始终为真。

最佳答案

变量必须是 volatile 的,因为 volatile 关键字表明值可能会在不同的访问之间发生变化,即使它看起来没有被修改。

因此,请确保将 game_running 声明为 volatile

关于java - 后台线程不起作用,但使用简单的 'System.out' 就可以了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34221883/

相关文章:

java - PHP var_dump 的 Java 等价物是什么?

Java 基本代码片段

java - 如何控制守护线程?

android - 无法访问主线程上的数据库 - Android Room - 使用 ThreadPoolExecutor

java - java中调用父构造函数

java - 向数据库返回一个 int 值

java - 关于如何在 Eclipse 4 中使用 IContextFunction 的示例

Java Thread 和 class.loader/class.forname 有助于理解

multithreading - 从 Thread.Terminate 设置 VCL 控件属性

c++ - 线程计时器,中断 sleep (停止它)