簡體   English   中英

Spring @asynch線程並發共享資源

[英]Spring @asynch thread concurrency shared resources

在我的服務中,我需要有n個不同的線程在n個不同的目錄上運行內容( n從1到8)。

我需要執行k個不同的任務(K變為從1到10000),每個任務被綁定到單個目錄,我需要在僅當有N1上沒有活動的線程的N1目錄執行K1任務。

我是Spring的新手,我想使用@async注釋,並且在這種情況下我不了解如何設置池。

for(int task = 1; task<=1000;task++){
   executeAsynchMethod( directoryNumber);
}

executeAsynchMethod應該保持空閑狀態,直到同一目錄上沒有其他任務為止。

UPDATE:示例:executeAsynchMethod在每個可用線程上啟動:
thread1->在目錄1上工作
thread2->在目錄2上工作
...
threadn->在目錄n上工作
每當線程完成其工作時,它將“釋放”其目錄,並且我希望任務在此目錄上運行。
thread7-> directory7是免費的
thread7(或另一個空閑線程)->在directory7上啟動新任務

我看到2個選項...

  1. 如果目錄名稱或多或少無關緊要,請在任務中使用maximum number of threads <= number of directories指定目錄,並使用maximum number of threads <= number of directories配置maximum number of threads <= number of directories池,例如

      @Override @Bean public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setMaxPoolSize(numberofdirectories); executor.setCorePoolSize(corepoolsize); executor.setThreadNamePrefix("directorynameprefix"); return executor; 

    }

  2. 使用Java Concurrent集合(例如ConcurrentLinkedDeque)來跟蹤空閑目錄並從任務本身訪問它。 對於目錄不可用的情況,需要有一種邏輯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM