线程安全的单态类会影响性能么?

04-04-07 missxkl
当一个线程安全的单态类被多线程并发访问时,对性能的影响有多大?

困惑中。。。

JFan
2004-04-07 15:55
我觉得,不会影响;
我有个疑问:stateless session bean,用实例池,每次执行远程方法对应不同对象,这种情况与使用RMI,多个客户共享一个对象.不考虑J2EE的框架代码,性能应该相等吗?

missxkl
2004-04-07 16:15
自己顶一下,个人认为
在stlb中,由appserver对线程、ejb的不同实例间进行了隔离
从使用ejb的角度来看也是线程安全的。
性能可能比纯rmi调用要慢一些,但健壮性要好

linxxtao
2004-04-08 09:19
SLSB不是线程安全的

banq
2004-04-08 15:00
我认为影响非常大,如果在关键点,可能导致全系统并发用户只有有一个用户,这样的系统算单用户系统或DEMO系统吧。

jaghuang
2004-04-08 15:45
其实这也是我这段时间看线程(不要笑,线程这东西我是这几天才开始研究的)的时候一直在考虑的问题,就象banq说的:“如果在关键点,可能导致全系统并发用户只有有一个用户”,其实我觉得无论什么时候都只是一用户而已,所谓的多线程也是要根据机制一个一个获得锁,然后才能运行。这就让我很郁闷和疑惑了,我到底应该怎么去使用线程这东西呢?目前使用到线程的地方只有connection pool而已(而且是不完全的线程,而且是一个单线程,用run()无stop()或yield()),这也是我为什么开始看线程的原因,但到现在还不明了。

missxkl
2004-04-08 16:48
/****
其实这也是我这段时间看线程(不要笑,线程这东西我是这几天才开始研究的)的时候一直在考虑的问题,就象banq说的:“如果在关键点,可能导致全系统并发用户只有有一个用户”,其实我觉得无论什么时候都只是一用户而已,所谓的多线程也是要根据机制一个一个获得锁,然后才能运行。这就让我很郁闷和疑惑了,我到底应该怎么去使用线程这东西呢?目前使用到线程的地方只有connection pool而已(而且是不完全的线程,而且是一个单线程,用run()无stop()或yield()),这也是我为什么开始看线程的原因,但到现在还不明了。
****/
如果每个线程操作只操作属于自己的对象,就不用当心锁,只有共享资源才需要锁。

直觉“线程安全单态类对性能是否有影响”应该从堆栈方向分析,但现在还没有搞清除,看来应该多看看虚拟机原理方面的冬冬。

另外四楼的同志说slsb不是线程安全的,请解释一下为什么?

jaghuang
2004-04-09 08:11
回楼上的
我说的情况就是“只有共享资源才需要锁”,如果不是的话,线程讨论起来也没太大意思了。

JFan
2004-04-09 12:51
请举例说明:何为关键点?如果没有,是否没有影响!

cats_tiger
2004-04-09 14:23
>请举例说明:何为关键点?如果没有,是否没有影响!
比如struts的ActionServlet,如果是线程安全的,就会严重的影响性能。但是ActionServlet不是单例。

neutrino
2004-04-12 13:22
一个线程安全的单态类在一定的条件下会影响性能
比如对IO操作,数据库等资源操作加入到同步块里

linxxtao
2004-04-14 12:44
我的意思是在SLSB的方法中对SLSB所包含的成员变量进行操作的时候不是线程安全的.另我想问问ACTIONSERVLET不是单例的这说法cats_tiger兄是怎么知道的?