0

我想停止以下列方式生成的线程。线程用于查看文件夹中的文件。我尝试了很多,搜索了很多,但没有成功。

任何机构都可以提供帮助并建议任何解决方案来停止生成的线程,如下所示:

public class HelloRunnable implements Runnable {
    public void run() {
         WatchService for files in folders which starts and runs here
         while (someCondition) {
               create a thread for copying some file which exits when run() finishes 
               created in another class which implements Runnable class
         }
    }

    public static void main(String args[]) {
       for(int i = 0;i< 5; i ++)
        new Thread(new HelloRunnable()).start();
    }
}
4

2 回答 2

1

您可以使用boolean someCondition在正在运行的线程和想要停止它的线程之间共享的变量。然而,这个变量需要volatile确保它的值在线程之间更新。

另一个想法是测试线程中断标志:

// thread that is spinning doing some job like watching a file
while (!Thread.currentThread().isInterrupted()) {
   ...
}

然后你可以从另一个线程调用中断来阻止它运行:

Thread thread = new Thread(...);
thread.start();
...
// tell the thread running in the background to stop
thread.interrupt();

像往常一样,您需要小心捕捉InterruptedException. 像下面这样的东西总是一个好主意:

try {
    ...
} catch (InterruptedException ie) {
    // re-interrupt the thread now that we've caught InterruptedException
    Thread.currentThread().interrupt();
    // probably quit the thread
    return;
}
于 2013-09-10T15:52:23.010 回答
0

如果你想停止一个线程 - 它的 run() 方法必须完成并退出。因此,请在 run() 方法中检查您的条件,以确保它最终完成并退出。

于 2013-09-10T16:01:59.893 回答