共享方法可以多线程吗?

时间:2012-02-28 16:07:26

标签: vb.net multithreading

正如问题所述,对象的共享方法是否可以是多线程的?我的技能组合并没有完全消解,否则我会测试自己。另一方面,我参与设计类可能是VB.Net中多线程应用程序的一部分。

3 个答案:

答案 0 :(得分:6)

如果你的意思是“同时从多个线程调用共享方法是安全的” - 答案是“它取决于”。方法本身不是多线程或单线程的;线程和方法是非常独立的东西。

如果从多个线程调用您的共享方法,那么除非有任何同步,否则它将在这些线程上同时执行。这肯定会导致问题如果您的方法使用共享状态而没有适当的安全措施。但是,如果该方法在访问共享资源时要小心(例如使用锁),则它不会访问线程之间共享的任何状态,这很好。

答案 1 :(得分:3)

是的,它可以。任何方法都可以成为一个线程。

答案 2 :(得分:1)

是的,共享方法可以由多个线程同时执行。 实际上,它们通常都是。与实例方法相比,您没有尽可能多地控制执行共享方法的线程。例如,考虑一个ASP.NET应用程序。不同的页面请求可能出现在不同的线程上。如果在Web应用程序中调用共享方法,那么它很可能会被多个线程执行。

在设计API时,这是非常重要的一点。所有自尊的API作者都会走极端,以确保所有共享/静态方法都是线程安全的。毕竟,让API的调用者同步访问您提供的每个共享/静态方法将是非常繁琐的。看看Microsoft为BCL中的几乎所有类提供的文档。

  

此类型的任何公共静态(在Visual Basic中为Shared)成员都是   线程安全。任何实例成员都不能保证是线程   安全

我还没有遇到Microsoft提供的非线程安全的静态方法。 1 这很好,因为它让你和我的生活更轻松。


1 如果您知道,请告诉我。