可以这么考虑。我也没说不赞成单例 Jdon框架也使用单例
要注意单例和POOl对于控制资源的作用,POOL有最大值,这样能够阻击超过服务器极限的峰值访问,而单例则不能,这就是为什么现在我们又需要单例又需要POOL的原因。
另外单例如果加同步会将多用户系统变成单用户,这些都是潜在的危险,而POOL则为每个线程开辟专用通道。
[该贴被banq于2007-11-01 15:28修改过]
没错,POOL最大10个,10用户同时来,马上分配,这是多任务,但是如果使用将业务bean使用单例,不管有多少个用户/线程来,都会去调用这一个实例,就像在tomcat下的servlet一样,不管有多少个请求来,servlet的实例总是一个,你是什么意思?
为什么?单例总是一个,POOL还得多个的可能,怎么会有超过服务器极限的峰值访问
pool我是知道怎么会事,如果pool最大10,我可以将10个业务bean放进去,如果有10用户来,我马上分配出去,这样不错,但如果此业务bean作为单例,不管有多少个用户(jsp线程)来,它总是调用这一个单实例,有什么关系?就像tomcat下的servlet,不管有多少个请求来,servlet总有一个实例,是供多个线程调用,你想说什么?
你对POOL机制没有了解,假设POOL有最大值10个,那么并发10个用户请求进来时,POOL中十个实例全部被分配出去了。如果并发来11个请求,POOL中只能分配10个,第11个就只能等待,等10个一个用完归还Pool才可以再借出来用,这样不是保护你的服务器了吗?如果你服务器CPU和内存最大只能支撑10个并发用户,如果来15或者200个请求,马上击溃服务器。
对,不管多少用户都会调用单例,这样就可能超过服务器的处理极限,击垮服务器了啊,就相当于撑死了。
所以,既不能服务器饿着,也不能服务器饱死。
Bang:可否举个例子,在一个web系统当中,做服务端的时候,在什么情况下你用到了pool。
主要是,我不太用pool除了这次写服务器软件的时候我用了pool。
但是一般的web项目当中服务端,倒是没用到。
Service类在整个项目中单例就够了。 domain model我觉得把他们放入到cache当中就可以了。