多线程我的客户端Java程序

时间:2012-10-01 00:18:36

标签: java multithreading client-server

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

1 个答案:

答案 0 :(得分:4)

  

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

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

  

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

我根本不会做锁定。我让你的第一个线程从服务器读取一个文件,将其写入文件夹,然后将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();