84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
我抽象了一个连接管理类, ConnectionManager, 主题类TopicManager,可能还有更多.
就拿这个TopicManager来说, 我的程序主要就是用发布订阅的模式实现通讯, 也就是TopicManager的访问读取会非常频繁. 因为是单例的, 我肯定要做线程同步处理, 这样在多线程下对性能的影响有多大了?
相比之下, 我如果取消TopicManager这个类, 直接对数据库操作, 通过c3p0连接池, 以上两种方法相比, 哪种开销更大.
多谢各位.
单例和多线程是完全不相关的两个领域,单例解决的是对对象的控制,多线程解决的是充分利用多核处理器的能力。并不是说单例就一定需要同步,只有在发生数据共享的时候才需要同步,所以就算你不使用单例,但是多个对象之间共享一个资源,一样是需要同步的;同理,就算你使用单例,但是你不发生资源共享同样是不需要同步的。
举个实际的例子:现在有一个单例,但是单例的方法并未使用任何static对象,也就是不存在资源共享,所以是不需要同步的。
个人理解 单例如果考虑多线程肯定要加锁,性能上肯定会受影响,根据业务情况也考虑使用threadLocal
单例是只读的。。没有任何影响。。
单例和多线程是完全不相关的两个领域,单例解决的是对对象的控制,多线程解决的是充分利用多核处理器的能力。
并不是说单例就一定需要同步,只有在发生数据共享的时候才需要同步,所以就算你不使用单例,但是多个对象之间共享一个资源,一样是需要同步的;同理,就算你使用单例,但是你不发生资源共享同样是不需要同步的。
举个实际的例子:
现在有一个单例,但是单例的方法并未使用任何static对象,也就是不存在资源共享,所以是不需要同步的。
个人理解 单例如果考虑多线程肯定要加锁,性能上肯定会受影响,根据业务情况也考虑使用threadLocal
单例是只读的。。没有任何影响。。