java - 如何在java中重新启动线程?

标签 java multithreading exception

<分区>

我创建了一个在源文件夹中搜索文件的程序。如果找到任何文件,它会处理该文件并将其移动到目标文件夹,然后在源文件夹中查找新文件。它必须继续检查文件的源文件夹。

我已经使用线程在源文件夹中查找文件。我面临的问题是,只要在文件处理过程中抛出任何异常,线程就会停止。即使抛出异常,我也希望线程继续运行。它必须将导致错误的文件移动到其他文件夹,并在源文件夹中查找新文件。如何让线程继续运行?

例如:

public void run() {
    try {
        searchfile();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}

public void searchfile(){
  ...
}

更新:

我的问题应该更清楚。实际上有 4 个源文件夹和 4 个目标文件夹。我必须在每个源和目标对中执行相同的操作。所以我在一个类中创建了 4 个线程,并在单独的类中执行操作。

class MainClass
{
   public static void main(String[] args){
      for(int i=0;i<4;i++){
         SearchClass search = new SearchClass();
         Thread thread = new Thread(search);
         thread.start();
     }
   }   
}

class SearchClass
{
   public void run() {
   try {
      searchfile();
   } catch(Exception e) {
      e.printStackTrace();
   }
}

public void searchfile(){ ... } }

所有线程都不会停止运行,即使它在中间捕获了任何异常。我该怎么做?

最佳答案

如果线程由于未捕获的异常而死亡,答案很简单:在适当的位置捕获异常,以便您可以继续运行。要么在 searchfile 方法中捕获异常,要么使 run 方法在循环中调用 searchfile。

关于java - 如何在java中重新启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/468266/

相关文章:

java - 为什么这个异常为空?

java - 如果用户移动了分隔线的位置,如何让 JSplitPane 保持相同的比例位置

android - 如何在 asyncTask 中执行 getWritableDatabase()

java - 在调用方法之前不执行任何操作的线程或类

c++ - 二维索引异常

java - 将对象作为 JSTL 标记属性传递

java - 构造函数引用不正确在 IntelliJ 2017.1.4 中标记为错误

java - 使用不同的按钮清除不同的编辑文本,同时重用相同的代码

java - 查找网页上最常见的单词(使用 Jsoup)?

c++ - 了解#pragma omp parallel