首页 新闻 会员 周边

关于静态方法的疑问

0
悬赏园豆:30 [已解决问题] 解决于 2008-03-17 13:56
<P>Web开发的后台方法如果用了静态方法是不是就无法实现并发了。<BR>是不是&nbsp; CustomerDA.FindCustomerByID(xxxx); 这样的方法同一个时间只有一个调用 而 new CustomerDA().FindCustomerByID(xxxx);&nbsp;这样的方法就可以有并发调用啊。</P> <P>不太清楚静态方法和非静态方法的机制的区别。&nbsp;有我种疑问的人多吗?</P>
Freud的主页 Freud | 初学一级 | 园豆:95
提问于:2008-03-17 10:52
< >
分享
最佳答案
0
能否安全并发,只需要看不同的运行实例(线程)里是否要读写同一个变量. 只要你的CustomerDA.FindCustomerByID(xxxx)里不使用静态成员字段(或者对静态字段做只读访问),就没有问题. 即使一定要写入会在其它线程里访问的字段,只要用好lock,也是一样的.总而言之,并发安全与否,与方法是静态与否,完全无关.
deerchao | 大侠五级 |园豆:8367 | 2008-03-17 12:32
其他回答(2)
0
静态方法当然是可以并发调用啦!
阿不 | 园豆:665 (小虾三级) | 2008-03-17 11:45
0
静态方法和实例方法的唯一区别就是在方法体中能否使用this。与并发访问没有任何关系。 但是,我们经常在MSDN中发现这样的说法: --------------------------- 此类型的任何公共 static(在 Visual Basic中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。 --------------------------- 这一条,其实是微软为他们提供的类库所提供的一个保证,也就是说,微软承诺这些方法可以安全的多线程使用。并不表示线程安全和静态方法有任何关系。如果我们要在自己的类库中暴露静态方法,也应该给用户与类似承诺。 大多数时候,静态方法并不会造成线程安全的问题。问题往往出现在静态字段上。对于这些字段的读写,应该尽量暴露相应的方法或属性,内部进行Lock,以确保给予用户上面的承诺。 关于静态字段的线程安全,可以参考一篇我以前的Blog: http://www.cnblogs.com/Cajon/archive/2007/03/21/Multi_Thread_Win_Form.html
Colin Han | 园豆:3041 (老鸟四级) | 2008-03-17 13:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册