首页
新闻
会员
周边
捐助
园子
·
关注
·
粉丝
·
会员
·
随便看看
·
消息
欢迎,请先
登录
或者
注册
。
登录
/
注册
闪存
博客
发言
小组
投递
新闻
提问
博问
添加
收藏
文库
问题反馈
问题列表
我关注的
我的博问
博问标签
关于静态方法的疑问
0
悬赏园豆:
30
[已解决问题]
解决于 2008-03-17 13:56
<P>Web开发的后台方法如果用了静态方法是不是就无法实现并发了。<BR>是不是 CustomerDA.FindCustomerByID(xxxx); 这样的方法同一个时间只有一个调用 而 new CustomerDA().FindCustomerByID(xxxx); 这样的方法就可以有并发调用啊。</P> <P>不太清楚静态方法和非静态方法的机制的区别。 有我种疑问的人多吗?</P>
.NET技术
C#
Freud
|
初学一级
|
园豆:
95
提问于:2008-03-17 10:52
显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
<
>
分享
分享您的问题
最佳答案
0
能否安全并发,只需要看不同的运行实例(线程)里是否要读写同一个变量. 只要你的CustomerDA.FindCustomerByID(xxxx)里不使用静态成员字段(或者对静态字段做只读访问),就没有问题. 即使一定要写入会在其它线程里访问的字段,只要用好lock,也是一样的.总而言之,并发安全与否,与方法是静态与否,完全无关.
deerchao
|
大侠五级
|
园豆:8367
|
2008-03-17 12:32
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
其他回答(2)
0
静态方法当然是可以并发调用啦!
阿不
|
园豆:665
(小虾三级)
|
2008-03-17 11:45
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
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
编辑文本
预览
上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要
登录
以后才能回答,未注册用户请先
注册
。