java - 如何防止线程在条件暂时不满足时被终止?

标签 java multithreading

此代码仅处理预设文件夹中存在的某些文件。但是在 Eclipse 上运行时,当文件夹中没有文件时,线程就会终止,尽管文件通常是稍后添加的。为了保持它始终运行,我在 run 函数中添加了一个无限 while 循环。这是可行的,但是有没有其他方法可以实现这一点,以便它使用更少的内存? 代码如下:-

import java.io.*;

public class AddService extends Thread{

public void run(){
    while(true){
    Handler obj=new Handler();
    File[] listOfFiles=obj.getFileList();
    if(listOfFiles.length>0)
    {           
        obj.process(listOfFiles);
    }
    else{
        try{

            AddService.sleep(1000);
        }
        catch(Exception ex){
        }
        }
    }
    }

public static void main(String args[]){
    AddService t1=new AddService();     
        t1.start();     
}
}

最佳答案

您可以通过ScheduledExecutorService做同样的事情

ScheduledExecutorService s = Executors.newScheduledThreadPool(1);
s.schedule(myrunnable, 1000, TimeUnit.SECONDS);

检查文件是否存在。或者,如果允许您使用第三方库,您可以使用 FileAlterationObserver 观察目录中的更改。

关于java - 如何防止线程在条件暂时不满足时被终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830445/

相关文章:

java - 用 Java 创建 Outlook 风格的用户界面?

java - Spring Kafka Consumer有时停止接收消息

java - 使用ListAdapter时如何使ListView对新数据无效

java - Threadpool 如何重用线程以及它是如何工作的

java - 如果我停止正在运行的 java 项目,ExecutorService 会发生什么情况

c++ - 引用计数的发布-消费排序

java - 关闭项目后线程仍然退出,如何杀死它?

Java - Jackson反序列化 - 如何反序列化接口(interface)数组?

java - 所有CRUD操作的线程安全列表

java - 运行 mvn jetty 时编译失败 :run