0

我有一个 Java 客户端(客户端服务器应用程序),它主要做两件事:(1)监听服务器以接收文件并将它们保存到本地文件夹,(2)监视该文件夹的更改并将更改发送到服务器。我想在自己的线程中运行每个。首先,在单独的线程上运行每个任务是否是个好主意。其次,当文件夹被任一任务使用时,如何锁定文件夹以避免干扰?

4

1 回答 1

4

在单独的线程上运行每个任务是个好主意吗

将程序拆分为线程听起来是个好主意,因为这两个任务可以异步和并发地工作。第一个线程可以在第二个线程上传的同时下载。

当任一任务使用文件夹以避免干扰时,如何锁定文件夹?

我根本不会做锁。我会让你的第一个线程从服务器读取一个文件,将它写入文件夹,然后将一个FileToSend对象(或者可能只是一个File对象)添加到BlockingQueue. 因此,您的第二个线程不会查看目录,而是等待将BlockingQueue文件发送到服务器。这个LinkedBlockingQueue类应该很好地工作。为BlockingQueue您处理锁定问题。

如果您确实需要共享锁,那么您可以将锁对象注入您的两个线程:

private final Object folderLock = new Object();
...
new Thread(new Downloader(folderLock)).start();
new Thread(new Uploader(folderLock)).start();
...

一个好的模式是在你的类上定义一个addFileToUpload(File fileToUpload)方法。Uploader然后你Uploader可以决定如何处理它。然后BlockingQueue可以是本地的Uploader

Uploader uploader = new Uploader();
// pass the uploader into the downloader
new Thread(new Downloader(uploader)).start();
new Thread(uploader).start();
于 2012-10-01T00:23:13.963 回答