在多线程环境中创建实例

时间:2012-11-03 20:54:24

标签: c# .net multithreading timer instance

我正在使用线程计时器,它正在创建新实例并调用如下方法

Timer_tick()
{
   Car C;
   C=new Car();
   C.Start()      ///  this will take time to complete
}

我的问题是,还有另一个线程带有下一个计时器滴答并执行相同的操作。 然后第二个线程从第一个Car实例中删除引用&它将在新的Car实例上调用start方法,因为第一个对象没有完成他的start方法(仍在进行中),但它不再具有“C”变量引用。 这会对第一个实例Start()方法的完整性或执行产生任何问题。 它可以被GC收集吗?

2 个答案:

答案 0 :(得分:5)

Car实例是Timer_tick()函数的特定调用的本地实例。其他线程的后续调用在他们自己的Car对象实例上运行。

然而,在函数退出后,它看起来并不像你正在对汽车做任何事情,除了运行启动功能之外,它最终会在没有做任何事情的情况下收集垃圾。那是你的意图吗?

答案 1 :(得分:0)

对于您的示例,不存在竞争条件,因为C不是全局对象。 C是本地的,每个线程都运行自己的方法副本,因此每个线程分别运行Start方法,然后进行垃圾收集。