2

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

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

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

4

2 回答 2

5

Car实例对于该函数的特定调用是本地的Timer_tick()。其他线程的后续调用对它们自己的Car对象实例进行操作。

但是,在函数退出后,您似乎并没有对汽车做任何事情,它最终会在没有对它做任何事情的情况下收集垃圾,除了运行 start 函数。那是你的意图吗?

于 2012-11-03T20:58:49.217 回答
0

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

于 2012-11-03T22:16:34.233 回答