悬赏分:30 浏览:481 次
Web开发的后台方法如果用了静态方法是不是就无法实现并发了。
是不是 CustomerDA.FindCustomerByID(xxxx); 这样的方法同一个时间只有一个调用 而 new CustomerDA().FindCustomerByID(xxxx); 这样的方法就可以有并发调用啊。
不太清楚静态方法和非静态方法的机制的区别。 有我种疑问的人多吗?
|
静态方法当然是可以并发调用啦! 静态方法和实例方法的唯一区别就是在方法体中能否使用this。与并发访问没有任何关系。 但是,我们经常在MSDN中发现这样的说法: --------------------------- 此类型的任何公共 static(在 Visual Basic中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。 --------------------------- 这一条,其实是微软为他们提供的类库所提供的一个保证,也就是说,微软承诺这些方法可以安全的多线程使用。并不表示线程安全和静态方法有任何关系。如果我们要在自己的类库中暴露静态方法,也应该给用户与类似承诺。 大多数时候,静态方法并不会造成线程安全的问题。问题往往出现在静态字段上。对于这些字段的读写,应该尽量暴露相应的方法或属性,内部进行Lock,以确保给予用户上面的承诺。 关于静态字段的线程安全,可以参考一篇我以前的Blog: http://www.cnblogs.com/Cajon/archive/2007/03/21/Multi_Thread_Win_Form.html |