if语句未被调用,除非之前打印条件

时间:2016-02-24 21:17:58

标签: java multithreading if-statement while-loop background-music

好的,这是一个奇怪的。基本上我正在创建各种播放列表,因此我的游戏中的背景音乐将在上一首歌曲完成之后播放,等等。如果我删除System.out.println(music.isPlaying());那么if语句中的代码块永远不会被调用,即使{ {1}}实际上是music.isPlaying()。但是,如果我在它之前添加print语句,那么它会神奇地工作。但这只是使用print语句,我不能只将布尔值发送到某个空方法或为它设置一个布尔变量,它只在发送到控制台时才有效。但是,由于显而易见的原因,我不希望它被发送到控制台的真相值。有谁知道为什么这样做以及我如何解决它?

false

我不确定这是否对此有任何影响但是这个循环是在第二个线程上调用的,因为我的游戏是在它自己的线程上运行的。如果由于任何原因这可能是原因,请告诉我,我可以发布我的多线程代码。

2 个答案:

答案 0 :(得分:1)

您需要将Music.isPlaying()正在使用的布尔变量声明为volatile,如下所示:

volatile boolean playing;

您可以详细了解volatile关键字在Javamex上的作用。

答案 1 :(得分:0)

首先,请发布您的线程代码。

此外,您可以将布尔值保存到正在打印的值,以便将其保留以供将来的函数调用。你可以在你的打印声明中做到这一点(我知道你说你不能保存它。

确保您的方法“同步”,以便它们不会竞争相同的资源。