gpt4 book ai didi

java - 对我的客户端 Java 程序进行多线程处理

转载 作者:行者123 更新时间:2023-12-01 18:59:42 26 4
gpt4 key购买 nike

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

最佳答案

is it a good idea to run each task on a separate thread

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

how do I lock the folder when it's used by either task to avoid interference?

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

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

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

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

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

关于java - 对我的客户端 Java 程序进行多线程处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666262/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com