2012-11-09 22 views
3

我正在創建多個線程,並且所有線程都讀取同一個屬性文件(對屬性文件沒有寫入操作)。這是否會導致性能開銷,因爲多個線程多次讀取同一個屬性文件?多個線程在Java中讀取同一個屬性文件會導致性能問題嗎?

+0

你多久閱讀一次這個文件? –

+0

只要你不寫,我不會說會有任何併發​​問題 –

+0

這些東西是自下而上的 - 你有沒有注意到你的系統的性能正在遭受線程爭奪?特別是在沒有提供數據的情況下猜測是沒用的 - 你有一個線程嗎?一百個線程? –

回答

5

我建議load the properties file一次,由所有線程使用相同的Properties實例。

負載一次減少磁盤訪問:

  • 更好的性能,這種應用
  • 更好的可用性整個系統的

多讀書是不是併發問題。

didierc註釋突出一個可能的瓶頸:每次訪問屬性是同步的,因此,當線程讀取值,所有其他可以等待。

爲了避免這種情況,你可能會在限制你的線程的構造函數或初始化使用Properties的。請勿在Thread.run()方法內的循環中使用p.getProperty(XXX)

+0

它是多線程共享的同一個屬性對象引用,它可能會導致問題嗎? –

+0

@raghuramgururajan這是你的選擇。你可以嘗試這兩種解決方案,看看在速度和內存消耗方面什麼效果最好,但是如果你想避免同時訪問同一個對象實例,恐怕你必須明確地複製線程中的屬性列表。請注意,'Properties'從'Hashtable'繼承,它是同步的。 – didierc

0

答案是「視情況而定」。主要取決於每個線程除了讀取屬性文件外還有多少工作。如果每個線程除了讀取文件外還有很多工作,性能不會受到太大影響。

你應該更關注潛在的正確性問題:如果不同的線程使用不同的屬性,將程序的行爲是否正確?如果沒有,你的程序就有一個種族危害錯誤:如果程序運行時屬性文件被修改(或刪除),某些線程可能會使用不同的屬性,從而產生錯誤的計算結果。

屬性文件用於程序配置。程序通常會在開始之後立即讀取所有配置信息,然後再進行任何實際工作。如果配置是可能faulty.You應該做同樣的,處理線程的產卵作爲實際工作做以後,他們可以因此快速失敗。這還可以確保程序的用戶在配置中每個錯誤只收到一條錯誤消息,而不是每個線程消息一條。

相關問題