我正在修改现有的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