如何通知线程更改

How to notify thread of changes

我创建了一个 class FolderObserver,它观察我项目中的一个文件夹是否有更改(文件 created/file 已删除)。我的 class 正在实现 Runnable 接口(我正在使用来自 apache commons 的 classes FileAlterationObserver、FileAlterationMonitor、FileAlterationListener)。

在我的主 class 中,我以我的 FolderObserver 对象作为参数启动了一个线程。 我想知道的是,如何将已发生的更改通知我的线程?例如,当我的文件夹中创建了一个新文件时。

这是我的 class FolderObserver:

public class FolderObserver implements Runnable {

private final String DIR = "server/scripts/gremlin-groovy/calculations/";

final long pollingInterval = 5000L;
private File folder;
private FileAlterationObserver observer;
private FileAlterationMonitor monitor;
private FileAlterationListener listener;



public FolderObserver()
{

    System.out.println("Creating Runnable");
    folder = new File(DIR);
    observer = new FileAlterationObserver(folder);
    monitor = new FileAlterationMonitor(pollingInterval);
}

@Override
public void run() {

    System.out.println("Thread is running");
    listener = new FileAlterationListenerAdaptor() {
            // Is triggered when a file is created in the monitored folder
            @Override
            public void onFileCreate(File file) {
                try {
                    // "file" is the reference to the newly created file

                    System.out.println("Created file : " + file.getCanonicalPath());

                } catch (IOException e) {

                }
            }

            // Is triggered when a file is deleted from the monitored folder
            @Override
            public void onFileDelete(File file) {

                try {
                    // "file" is the reference to the removed file

                    System.out.println("Removed file : " + file.getCanonicalPath());


                    //logger.log(LogLevel.DEBUG,logId,"File exists in location '{}'",bool);
                } catch (IOException e) {
                    //logger.log(LogLevel.ERROR, "Received IOException '{}' when trying to remove file", e.toString());

                }
            }
        };
        observer.addListener(listener);
        monitor.addObserver(observer);
        try {
            monitor.start();
            System.out.println("Monitor started");
            //logger.log(LogLevel.DEBUG,logId,"Monitor started");
        } catch (Exception e) {
            //logger.log(LogLevel.ERROR, "Received Exception '{}' when trying to start monitor", e.toString());
        }
}

   }

这就是我从主线程创建和启动线程的方式 class:

  FolderObserver observer = new FolderObserver();
  Thread t = new Thread(observer);
  t.start();

您在 FolderObserver 中创建了一个内部接口。

public interface MyTrueObserver(){
   public void notifySmthChanged();
}

您现在可以通过

在主 class 中实现 class
public class MyMainClass implements MyTrueObserver()

你定义接口方法

public void notifySmthChanged(){
// I got called Do smth!
}

最后,您在主帖中引用了您的帖子 class。

并在这里调用它

@Override
public void onFileCreate(File file) {
               referenceObjectToMainClass.notifySmthChanged();
            }