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