【问题标题】:How to stop a java 8 lambda-runnable-thread如何停止 java 8 lambda-runnable-thread
【发布时间】:2014-10-06 20:33:00
【问题描述】:

我想停止这个话题:

Runnable run = () -> { while(true)[...]; };
run.run();

但是没有run.stop()方法。

请建议其他尽可能短的方法来启动和停止线程或停止此运行的方法......事情。

【问题讨论】:

  • 什么线程?我没有看到您正在创建线程的任何地方。
  • FWIW:下面是其他人所说的另一种思考方式:Thread.start() 是库为您的代码调用以启动线程提供的方法。 YourClass.run() 是 you 为库提供的用于调用 in 新线程的方法。

标签: java multithreading runnable


【解决方案1】:

Runnable.run() 不创建线程。您正在当前线程中调用 run() 方法。要创建一个线程,您只需要这样做:创建并启动一个线程:

Thread t = new Thread(run);
t.start();

然后你可以调用

t.interrupt();

请阅读 Thread.interrupt() 上的 javadocs,了解如何将 run() 方法构造为可中断。

【讨论】:

    【解决方案2】:

    您通常做的最简单的事情是向由不同线程设置的可运行对象添加一个 volatile 布尔字段。

    在您的情况下,您可能会使用 AtomicBoolean 而不是 volatile 字段并在闭包中捕获它。创建闭包后,您可以使用此 AtomicBoolean 停止。

    【讨论】:

      【解决方案3】:

      为了停止一个线程,首先像这样创建一个线程

      Thread thread = new Thread(run);
      

      为了启动线程 打电话

      thread.start(); 
      

      start 方法会调用run 方法,但如果你直接调用run() 方法则不会创建新线程,代码将在现有线程中执行。为了停止该方法你可以使用interrupt

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-11
        • 2012-03-16
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多