我正在修改現有的java多線程應用程序。在每個線程中,應用程序通過同步方法調用(我正在考慮用enum或readwritelock替換)來檢索outputstream對象。一旦線程獲得了引用,它就會繼續在輸出流上同步,然後再傳遞byteArrayOutputStream給它以寫出)。任何關於如何可以優化它的想法 - 如果有輕微的高負載(增加的線程數並不是我正在考慮的),我會在監視器狀態中看到一些線程。任何有用的建議都會受到歡迎。在java中多次同步參考
回答
在每個線程中,應用程序通過同步方法調用(我想用enum或readwritelock替換)檢索outputstream對象。
這似乎是合理的。每個線程相互阻塞只是爲了獲得適當的輸出流。如果可以在地圖中完成從線索信息到OutputStream
的映射,您可能可以用ConcurrentHashMap
替換它。
一旦該線程已獲取的基準,它然後前進到上OutputStream的傳遞一個ByteArrayOutputStream到它用於寫出)
一旦它具有適當的OutputStream
它鎖定在它之前再次同步保證對流的唯一訪問權限。您可能需要確保流下方的內容尚未同步(通常不是這種情況),否則這看起來很合理。
我如何能去優化它,如果在所有
你的程序是最有可能會成爲IO同步的成本約束之前長期任何想法有差別。除非分析人員告訴你同步存在性能問題,否則我會將您的優化工作集中在其他地方。
感謝您的迴應和您的想法 - 我將在更新應用程序後進行更新。 –
至於我可以看到這裏有兩個同步呼叫:
- 調用獲得一個OutputStream(同步的一些對象)
- 調用ByteArrayOutputStream.writeTo(同步的一些OutputStream中)
後者基本上調用outputstream.write,你不應該從不同的線程同時做,所以沒有辦法避免第二個。
至於第一個,根據您提供的信息,不可能說是投入時間來擺脫同步,或者甚至是否有必要。用讀寫鎖代替它可能是有道理的 - 除非基本上每個人都在寫。相反,如果只有讀者可以(可能)完全擺脫鎖定。
感謝您的迴應和您的想法 - 我將在更新應用程序後進行更新。 –
- 1. 參考在Java
- 2. 參考在Java
- 3. 同步(類參考)是做什麼的?
- 4. 同步的「參考」或實例
- 5. Visual Studio「項目」參考同步問題
- 6. .NET CLR - 對象參考同步
- 7. 關於Java參考和同步關鍵字實踐的問題?
- 8. 有沒有同步算法/參考可用於同步目錄?
- 9. 在java中同步多線程
- 10. 春異步參考
- 11. 同步在java中
- 12. 同步在Java中
- 13. Java中的同步 - Java示例中的思考
- 14. C++按參考多次返回
- 15. 許多次參考相同的模型字段
- 16. 使用參考VS getReference多次調用同一個對象
- 17. 多次收聽同一個Firebase參考文件的性能
- 18. 多參考在SQL
- 19. 同步java中的形式參數
- 20. Java可見性和同步 - Java示例中的思考
- 21. 在自參考表中顯示相同的列兩次
- 22. Java setPreferredSize()參考
- 23. Java ArrayList參考
- 24. 多級java行爲同步
- 25. 同步多線程JAVA
- 26. Java - 多線程和同步
- 27. Java多線程同步
- 28. Java多線程同步
- 29. 的Java多線程同步
- 30. Java多線程同步塊
某些代碼會很有用 – mishadoff
您的意思是將流傳遞給byteArrayOutputStream.writeOut? – subsub