多线程处理我的客户机Java程序
我有一个Java客户端(客户机-服务器应用程序),它完成两项主要任务:(1)侦听服务器以接收文件并将其保存到本地文件夹;(2)监视该文件夹的更改并将更改发送到服务器。我想在各自的线程中运行每个线程。首先,在单独的线程上运行每个任务是否是一个好主意。第二,当任何一个任务使用该文件夹时,如何锁定该文件夹以避免干扰 在单独的线程上运行每个任务是一个好主意吗 将程序拆分为线程听起来是个好主意,因为这两个任务可以异步并发地工作。第一个线程可以在第二个线程上载的同时下载 当任一任务使用文件夹时,如何锁定该文件夹以避免干扰 我根本不会锁。我会让您的第一个线程从服务器读取一个文件,将其写入文件夹,然后将一个多线程处理我的客户机Java程序,java,multithreading,client-server,Java,Multithreading,Client Server,我有一个Java客户端(客户机-服务器应用程序),它完成两项主要任务:(1)侦听服务器以接收文件并将其保存到本地文件夹;(2)监视该文件夹的更改并将更改发送到服务器。我想在各自的线程中运行每个线程。首先,在单独的线程上运行每个任务是否是一个好主意。第二,当任何一个任务使用该文件夹时,如何锁定该文件夹以避免干扰 在单独的线程上运行每个任务是一个好主意吗 将程序拆分为线程听起来是个好主意,因为这两个任务可以异步并发地工作。第一个线程可以在第二个线程上载的同时下载 当任一任务使用文件夹时,如何锁定该文
FileToSend
对象(或者可能只是一个文件
对象)添加到文件夹。因此,您的第二个线程不会查看目录,而是在BlockingQueue
上等待文件发送到服务器。这门课应该做得很好。BlockingQueue
负责为您锁定
如果确实需要共享锁,则可以将锁对象注入两个线程:
private final Object folderLock = new Object();
...
new Thread(new Downloader(folderLock)).start();
new Thread(new Uploader(folderLock)).start();
...
一个好的模式是在Uploader
类上定义一个addFileToUpload(filefiletoupload)
方法。然后你的上传者可以决定如何处理它。BlockingQueue
可以是上传程序的本地
Uploader uploader = new Uploader();
// pass the uploader into the downloader
new Thread(new Downloader(uploader)).start();
new Thread(uploader).start();
在单独的线程上运行每个任务是一个好主意吗
将程序拆分为线程听起来是个好主意,因为这两个任务可以异步并发地工作。第一个线程可以在第二个线程上载的同时下载
当任一任务使用文件夹时,如何锁定该文件夹以避免干扰
我根本不会锁。我会让您的第一个线程从服务器读取一个文件,将其写入文件夹,然后将一个FileToSend
对象(或者可能只是一个文件
对象)添加到文件夹。因此,您的第二个线程不会查看目录,而是在BlockingQueue
上等待文件发送到服务器。这门课应该做得很好。BlockingQueue
负责为您锁定
如果确实需要共享锁,则可以将锁对象注入两个线程:
private final Object folderLock = new Object();
...
new Thread(new Downloader(folderLock)).start();
new Thread(new Uploader(folderLock)).start();
...
一个好的模式是在Uploader
类上定义一个addFileToUpload(filefiletoupload)
方法。然后你的上传者可以决定如何处理它。BlockingQueue
可以是上传程序的本地
Uploader uploader = new Uploader();
// pass the uploader into the downloader
new Thread(new Downloader(uploader)).start();
new Thread(uploader).start();
你能编辑你的帖子来展示你的一些作品吗?你试过什么?你读过什么文档?@Gray我不是在要求代码更正;我在寻求建议。如何锁定资源(在我的例子中是文件夹)并将其解锁。观察一下,如果你想为单线程锁定文件夹,那么拥有两个线程有什么意义?@Vash一个线程可以在另一个线程发送文件时更改文件,或者任何你能想到的干扰。写入收到的文件是必须发送到服务器的更改吗?要从中加载文件的服务器和要将更改发送到的服务器-它们是相同的服务器还是不同的服务器?您可以编辑您的帖子以显示您的一些工作吗?你试过什么?你读过什么文档?@Gray我不是在要求代码更正;我在寻求建议。如何锁定资源(在我的例子中是文件夹)并将其解锁。观察一下,如果你想为单线程锁定文件夹,那么拥有两个线程有什么意义?@Vash一个线程可以在另一个线程发送文件时更改文件,或者任何你能想到的干扰。写入收到的文件是必须发送到服务器的更改吗?加载文件的服务器和发送更改的服务器是相同的还是不同的服务器?太棒了!BlockingQueue是Java类吗?如何在两个线程之间共享它?是的BlockingQueue
是一个Java接口LinkedBlockingQueue
是其中一种实现。您可以在外部定义它并将其传递到每个线程Runnable
。参见上面的锁示例。好的,下载程序向上传程序发送一个addFileToUpload
msg,但是上传程序是下载程序中的一个成员,对吗?下载程序将文件上传到它。或者我应该让那个方法成为类方法吗?是的,我会让它成为@saadtaame的成员。课堂教学法会起作用,但在我看来很糟糕。太好了!BlockingQueue是Java类吗?如何在两个线程之间共享它?是的BlockingQueue
是一个Java接口LinkedBlockingQueue
是其中一种实现。您可以在外部定义它并将其传递到每个线程Runnable
。参见上面的锁示例。好的,下载程序向上传程序发送一个addFileToUpload
msg,但是上传程序是下载程序中的一个成员,对吗?下载程序将文件上传到它。或者我应该让那个方法成为类方法吗?是的,我会让它成为@saadtaame的成员。类方法可以工作,但它在IMHO中不好。