我正在使用线程计时器,它正在创建新实例并调用如下方法
Timer_tick()
{
Car C;
C=new Car();
C.Start() /// this will take time to complete
}
我的问题是,还有另一个线程带有下一个计时器滴答并执行相同的操作。
然后第二个线程从第一个Car实例中删除引用&它将在新的Car实例上调用start方法,因为第一个对象没有完成他的start方法(仍在进行中),但它不再具有“C”变量引用。
这会对第一个实例Start()
方法的完整性或执行产生任何问题。
它可以被GC收集吗?
答案 0 :(得分:5)
Car
实例是Timer_tick()
函数的特定调用的本地实例。其他线程的后续调用在他们自己的Car
对象实例上运行。
然而,在函数退出后,它看起来并不像你正在对汽车做任何事情,除了运行启动功能之外,它最终会在没有做任何事情的情况下收集垃圾。那是你的意图吗?
答案 1 :(得分:0)
对于您的示例,不存在竞争条件,因为C不是全局对象。 C是本地的,每个线程都运行自己的方法副本,因此每个线程分别运行Start方法,然后进行垃圾收集。