java - 如何在Thread中的run()方法中访问公共(public) boolean 变量

标签 java multithreading

如何在run()方法中访问变量boolean check_point值?

public class Transciever {

public boolean check_point = true;

  public void run() {

                while (true) {

                         System.out.println("before client listening...");
                        socket = serverSocket.accept();
                        System.out.println("after socket accept");
                        check_point = false; 
   }
  }
}

我无法从 run() 方法更改变量 boolean check_point 的值,但我可以访问其他正常方法。

最佳答案

我认为您正在尝试访问线程外部的 check_point 方法。 首先,Transciever 不是线程,因为您还没有实现 runnable 方法。 您需要一个 getter 方法,以便其他类能够获取标志,并且不需要线程实例来获取值,您需要保留 Transciever 类实例 所以应该是这样的。

class Main{
 public static void main(String...arg){
  Transciever t=new Transciever();
  new Thread(t).start();
  //......
  //......
  boolean flag=t.getFlag();
 }
}

public class Transciever implements Runnable{
private volatile boolean check_point = true;
public boolean getFlag(){ return this.check_point;}
  @Override
  public void run() {
                while (true) {

                         System.out.println("before client listening...");
                        socket = serverSocket.accept();
                        System.out.println("after socket accept");
                        check_point = false; 
   }
  }
}

另一个例子here

关于java - 如何在Thread中的run()方法中访问公共(public) boolean 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17572438/

相关文章:

java - 如果 ArrayList 的 clone() 被破坏了,为什么他们不能修复它呢?

java - 从锯齿状数组的每一行添加元素

C pthread.h 不工作

Java:运行可能阻塞的代码

blackberry - Blackberry JRE 5.0.0 中的 fillTriangle()

java - JNA - CreateToolhelp32Snapshot 未返回所有 DLL

java - 调用 executorService.invokeAll(callables) 时如何按顺序获取 Future 列表?

c++ - 将遗留 C 代码集成到多线程 C++ 代码中

c# - 处理 Task.Run 中的异常

java - 存档 commons-io-2.4.jar 不存在