Java多线程同步问题

标签 java multithreading

我在 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/

相关文章:

java - 终止无响应的线程

c# - 使用 C# 提高多线程访问的位图检索(从屏幕/窗口)速度和存储

java - 如何在 Jersey Client 中引发自定义异常?

java - 使用 Redis Sentinel 正确配置 @EnableRedisHttpSession

java - 线程池处理 'duplicate' 任务

c++ - 将 lambda 传递给 std::thread 并调用类方法

python - 在以下情况下Thread()。join如何工作?

java - 如何覆盖 Java 中的货币符号?

java - hibernate “列---不能为空

c# - STA 线程中止异常