java - 一旦变量设置为 false,如何停止线程?

标签 java multithreading synchronization boolean

一旦我的 boolean 变量设置为 false,如何停止所有线程进一步执行?例如,这是一个简单的代码:-

class testing implements Runnable{
   static boolean var;
   int id;
   public void run(){
      System.out.println(id);
      var = false;
   }
   testing(int id){
      this.id = id;
   }
   public static void main(String[] args){
      int i = 1;
      var = true;
      while(var){
         new Thread(new testing(i++)).start();
      }
   }
}

我只想打印“1”,但是当我执行此代码时,我得到多个数字。我该如何防止这种情况?

最佳答案

您不能在 Java 中执行此操作,因为 Java 没有像 C# 那样的属性。 java中最好的解决方案是这样做:

public void setMyVariable(boolean v) {
    var = v;
    // code to stop executing threads
}

但是,如果您仍然想按照自己想要的方式进行操作,还有一种更糟糕的方法:

创建一个新线程,并运行以下代码:

boolean run = true;
while(run) {
    if (!var) {
        // code to stop your threads
        run = false;
    }
}

但请记住,第二种方式不应该是您的选择。坚持使用第一种方法要好得多

关于java - 一旦变量设置为 false,如何停止线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29719700/

相关文章:

java - ServiceNow 中的 GET() Web 服务调用引发数字格式异常

c++ - 将多线程类重构为单线程+和多线程

Java:使用 Swing 编写游戏

java - Java中实例方法同步的等价代码

java - 遍历集合时如何防止嵌套同步块(synchronized block)

java - 我不太了解 do { } while 结构

java - 捕获更通用类型的异常好吗?

javascript - 使用 JavaScript Web Workers 的并行编程/同步

java - 什么会导致UDP数据包在发送到本地主机时被丢弃?

java - java中一个线程的输入来自另一个线程的无限等待