繁体   English   中英

多线程我的客户端Java程序

[英]Multithreading my client Java program

我有一个Java客户端(客户端服务器应用程序),该客户端执行两项主要任务:(1)侦听服务器以接收文件并将其保存到本地文件夹中,以及(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();
...

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

Uploader uploader = new Uploader();
// pass the uploader into the downloader
new Thread(new Downloader(uploader)).start();
new Thread(uploader).start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM