java - 与具有无限循环的线程(可调用)相结合

标签 java multithreading event-handling thread-safety

我定义了一个名为“folderwatcher”的类(可调用),它正在监视特定文件夹的任何更改。主要代码处于无限循环中,类似于: Monitor a Directory for Changes using Java 。我希望调用此“folderwatcher”的方法/类监听“folderwatcher”发现的任何事件,并根据该事件执行一些操作。有谁知道我该怎么做?我需要事件处理程序吗?有什么例子吗? 谢谢

最佳答案

首先,使用无限循环方法是错误的。如果您确实在使用Callable,那么您已经在使用ExecutorService。您应该使用 ScheduledExecutorService 并将您的代码安排为重复任务。

对于事件处理程序来说,这并不难实现,例如:

interface FileDetectedHandler { void fileDetected(File f); }

public static void main(String[] args) {
  final ScheduledExecutorService scheduler = 
     Executors.newSingleThreadScheduledExecutor();
  final FileDetectedHandler h = new FileDetectedHandler(File f) {
    public void fileDetected(File f) {
      System.out.format("File detected: %s\n", f);
  }};
  final Runnable r = new Runnable() { public void run() {
    File f = null;
    //detect file
    if (f != null) h.fileDetected(f);
  }};
  scheduler.scheduleWithFixedDelay(r, 0, 2, TimeUnit.SECONDS);
}

关于java - 与具有无限循环的线程(可调用)相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12070117/

相关文章:

java - 从 STS 中永久删除 Pivotal tc

java - 如何选择一个图片目录(使用单选按钮)以 Java for Android 显示?

java - publishOn 和并行的区别

C# 到 VB : Class. 事件 += (sender, args) => FunctionName(params)

c++ - 如何实现从 Windows 脚本宿主到脚本的事件调度

java - 在 Java 中从值中减去 X%

java - 生产者线程和消费者线程之间的线程间通信?

multithreading - 线程中的 Perl 内存泄漏(线程不释放内存)

Javascript:删除附加到对象方法的匿名函数的事件监听器

java - 如何在 C# 中反序列化 JAVA 程序使用 jackson 发送的 JSON 对象?