【问题标题】:Java change main boolean from ThreadJava 从 Thread 更改主布尔值
【发布时间】:2015-02-08 09:51:28
【问题描述】:

如何从线程内部更改我在 Main 类中定义的布尔值?使用booleanName = true; 似乎不起作用。 有没有办法改变变量的值?

【问题讨论】:

  • 请发布您的代码
  • thread = new Thread() {public void run() {}}; thread.start(); 我想从这个线程内部更改主类中定义的布尔值
  • 请发布您的所有代码,包括您的 Main 类。
  • 所有代码都很长,但有没有办法只从线程内部更改变量的值?
  • 将变量标记为volatile

标签: java multithreading variables boolean


【解决方案1】:

更改值就是这样。 booleanName = false 如果booleanName 可以从您的线程代码中访问,或者类似Main.setBooleanName(false) 如果不是。

如果您想从另一个线程读取该布尔值,您还必须确保新值对您的另一个线程可见。这可以通过使booleanName volatile 来完成,使用像AtomicBoolean 这样的线程安全布尔类型或在从booleanName 读取之前进入/离开synchronized 方法或块。

【讨论】:

    【解决方案2】:

    根据其他人的建议,您应该发布您的示例代码。如果您问是否可以从线程的 run() 方法内部更改变量的状态,是的,当然可以。

    public class MyThread implements Runnable {
    
        private boolean b = true;
    
        public void run() {
            b = false;
            System.out.println(b);
        }
    
        public boolean getBoolean() {
            return b;
        }
    
        public static void main(String[] args) throws InterruptedException {
            Thread t = new Thread(new MyThread());
            t.start();
        }
    }
    

    【讨论】:

    • 我在这里有这段代码:pastebin.com/GMf55yNd 我想在连接成功时将 try 块内的布尔值设置为 true,如果连接不成功,则在 catch 块内将其设置为 false。在这种情况下我应该怎么做?布尔值在主类中定义,主类在 void 中包含此线程。
    • 不过,您所面临的问题在您的示例代码中并不清楚。请展开。 “新的聊天客户端(“本地主机”,8000)。运行();“ : 你想听什么?开始另一个线程?
    • 我正在尝试在此主题中启动一个新的 Netty 客户端,如果连接成功,我想将布尔值设置为 true,或者在连接失败时设置为 false
    猜你喜欢
    • 1970-01-01
    • 2012-03-17
    • 2014-01-06
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2021-11-28
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多