[英]Creating multiple threads for writing files to Disk, Java
我有一段代碼將對象放入LinkedBlockingQueue時將對象寫入磁盤。
到目前為止,這是單線程的。 我需要使它成為多線程的,因為內容正在被寫入磁盤上的不同文件。因此,獨立編寫它們不會有任何危害。
我不確定我是否可以在這里使用ThreadPool,因為我不知道何時將對象放置在隊列中! 現在,如果我決定使用5個線程的fixedThreadPool,如何在多個對象之間分配它?
任何建議都非常感謝。 這是我現有的代碼。 當隊列中有新對象時,我想生成一個新線程。
一般而言,如果文件位於同一物理設備上,則由於存儲設備在讀取/寫入操作中同步工作,因此不會獲得性能上的好處。 因此,您的線程將被阻塞在I / O上,這可能導致速度降低,並且肯定會浪費可能在做有用工作的線程。
how do i distribute it among multiple objects?
好吧,您不必擔心任務分配。 您需要做的就是提交一個runnable或callable(描述您的任務),它將被移交給池中的空閑線程,或者如果所有線程都在忙於處理,則此新任務將在隊列中等待。
以下是您可以嘗試的...
1)創建最適合您的線程池。
ExecutorService es = Executors.newFixedThreadPool(desiredNoOfThreads);
2)由於您已經有了隊列-
while (true) {
//peek or poll the queue and check for non null value
//if not null then create a runnable or callable and submit
//it to the ExecutorService
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.