与具有无限循环的线程(可调用)进行通信

时间:2012-08-22 09:28:30

标签: java multithreading event-handling thread-safety

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

2 个答案:

答案 0 :(得分:3)

首先,使用无限循环方法是错误的。如果您确实在使用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);
}

答案 1 :(得分:0)

使用回调。这可以通过在父对象上实现synchronized方法然后将对父对象的引用传递给runnable对象的构造函数来完成。然后,runnable可以调用父进程上的方法来通知它。

http://en.wikipedia.org/wiki/Callback_(computer_programming