我在 java 多线程方面遇到了一些问题,最好通过示例进行解释:
class Thread1 extends Thread
{
boolean val=false;
public void set()
{
val=true;
}
public void run()
{
while (true)
{
if(val==true)
{
System.out.println("true");
val=false;
}
try
{
sleep(1);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
所以这是一个在单独线程中运行的简单类。
现在考虑这种情况: 1)我在上面的类中启动线程 2)从其他线程我调用 Thread1.set() 函数 3) Thread1.run() 函数的条件计算结果为 true
现在,问题是,如果我从上面的代码中删除 sleep(1),这个条件永远不会设置为 true。
所以我的问题是:有没有其他方法可以中断 run() 函数,以便 其他函数可以设置将在 run() 函数内部使用的变量吗? (我正在 Android 上制作游戏,因此 openGL 渲染器在一个线程中运行,而我的游戏逻辑线程将在另一个线程中运行,我想每一帧或两帧同步它们),
最佳答案
如果只有一个线程(即除读取它的线程之外的线程)正在修改 val
,则将其设为 volatile
。
关于Java多线程同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903587/