84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
我抽象了一个连接管理类, ConnectionManager, 主题类TopicManager,可能还有更多.
就拿这个TopicManager来说, 我的程序主要就是用发布订阅的模式实现通讯, 也就是TopicManager的访问读取会非常频繁. 因为是单例的, 我肯定要做线程同步处理, 这样在多线程下对性能的影响有多大了?
相比之下, 我如果取消TopicManager这个类, 直接对数据库操作, 通过c3p0连接池, 以上两种方法相比, 哪种开销更大.
多谢各位.
單例和多執行緒是完全不相關的兩個領域,單例解決的是對物件的控制,多執行緒解決的是充分利用多核心處理器的能力。 並不是說單例就一定需要同步,只有在發生資料共享的時候才需要同步,所以就算你不使用單例,但是多個物件之間共享一個資源,一樣是需要同步的;同理,就算你使用單例,但是你不發生資源共享同樣是不需要同步的。
舉個實際的例子:現在有一個單例,但是單例的方法並未使用任何static對象,也就是不存在資源共享,所以是不需要同步的。
個人理解 單例如果考慮多線程肯定要加鎖,性能上一定會受影響,根據業務情況也考慮使用threadLocal
單例是唯讀的。 。沒有任何影響。 。
單例和多執行緒是完全不相關的兩個領域,單例解決的是對物件的控制,多執行緒解決的是充分利用多核心處理器的能力。
並不是說單例就一定需要同步,只有在發生資料共享的時候才需要同步,所以就算你不使用單例,但是多個物件之間共享一個資源,一樣是需要同步的;同理,就算你使用單例,但是你不發生資源共享同樣是不需要同步的。
舉個實際的例子:
現在有一個單例,但是單例的方法並未使用任何static對象,也就是不存在資源共享,所以是不需要同步的。
個人理解 單例如果考慮多線程肯定要加鎖,性能上一定會受影響,根據業務情況也考慮使用threadLocal
單例是唯讀的。 。沒有任何影響。 。