6

在别人写的一个项目中,我在很多地方都遇到过这样的代码,我仍然不明白为什么有人会写这样的代码。

考虑下面的代码(这段代码在 C# 中,但我认为它也适用于许多语言——可能只是语法不同,或者类名和执行方式不同——你明白了。):

Thread thread;

thread = new Thread(new ThreadStart(method));
thread.Start();
thread.Join();

据我了解,这段代码意味着启动一个线程并运行method,然后这个线程等待新启动的线程完成,而不做任何其他事情。

如果是这样,为什么我不直接调用该方法,即

method()

谁能向我解释我的理解是否正确?第一个代码片段在功能上与第二个相同吗?

4

2 回答 2

12

通常,你是对的,这不是一件很有用的事情。

但有时,您可能希望操作在单独的线程上运行,因为它修改或依赖于某些每个线程的状态。

该函数可能正在处理线程本地数据,或者它可能会调用本机 COM 代码,并且 COM 的线程单元是在每个线程的基础上初始化的,因此为了避免这受到调用代码更改的影响,您可以只想分拆一个新线程来调用该函数。

当然,在这种情况下,一个小的代码注释来解释为什么要做一些看起来毫无用处的事情,可能是个好主意。;)

于 2012-11-12T13:35:01.087 回答
4

从功能上讲,两段代码是相同的。线程案例只是将调用委托给高价。但是存在一些有用的情况:

  • 您的线程有另一个安全上下文,但您希望默认执行。模拟可能花费与从池中分配线程几乎相同的处理器时间
  • 您的线程具有比当前更大(或有时更低)的优先级 - 所以关键的一小部分代码可以在接近运行时执行。对于低优先级,您假设需要等待(例如来自用户输入)
于 2012-11-12T13:36:44.493 回答