2012-01-24 71 views
0

可以在多線程環境中寫入相同的工作簿(HSSFWorkbook)嗎?
工作簿存儲在由線程共享的線程安全集合中。
每個線程在不同的工作表上工作。POI工作簿多線程

+0

POI文檔是否直接說圖書館是線程安全的? (即有意實施)。如果不是,假設它不是。 – millimoose

回答

0

是的,你可以在多線程環境下寫入相同的工作簿。但是,如果你已經使其線程安全,那麼一次只有一個線程可以訪問它。

+0

我不明白,我想用一個工作簿,所有的線程都會得到這個線程的引用並寫入新的工作表 – omrid

+1

@omrid你能顯示一些代碼嗎?你到現在爲止嘗試過什麼?可能那時我們將能夠幫助你。 – gprathour

+0

我不確定你可以有多個線程寫入*相同*工作簿,當然不是所有情況。多個線程寫入自己的工作簿是好的,但 – Gagravarr

0

FAQ的相關條目描述這個如下:

簡而言之:在不同的線程 將工作處理不同的文檔對象。在多個線程中訪問相同的文檔不會 工作。

這意味着在工作簿/文件/幻燈片對象不檢查 線程安全的,但像全局高速緩存或 其他數據結構的任何全球舉行對象是針對多線程訪問 相應的保護。

關於同時在不同線程中訪問不同工作簿表 的討論已經有了。儘管這可能會在某種程度上起作用,但它可能會導致很難跟蹤錯誤,因爲多線程問題通常只在長時間運行時纔會顯示,當許多線程處於活動狀態並且系統處於高負載狀態(即在生產使用中)時!也可能是 它可能會在未來版本的Apache POI中崩潰,因爲我們不專門使用此庫來測試 。

所以,你需要確保只有一個線程工作的一個工作簿對象在同一時間可以肯定的,例如通過鎖定Workbook對象本身。