在c#中对同一个对象再次使用new
本文关键字:new 一个对象 | 更新日期: 2023-09-27 18:10:24
namespace usenewagain
{
class Program
{
public static Thread thread1;
static void Main(string[] args)
{
thread1 = new Thread(() => threadsDelegate(TimeSpan.FromMinutes(1), 1) );
thread1.Start();
while(thread1.IsAlive)
{
}
thread1 = new Thread(() => threadsDelegate(TimeSpan.FromMinutes(2), 1));
thread1.Start();
while(thread1.IsAlive)
{
}
Console.WriteLine("Done...");
Console.ReadLine();
}
}
}
据我所知,在这个控制台程序中,在thread1上再次使用new是合法的,看起来它工作得很好。据我所知,thread1被第二次new调用覆盖了。我可以得到一些验证,再次使用new这种方式是有效的吗?
谢谢…
是和不是。
每次使用new
时,您都在创建一个新对象,并在变量中存储对该对象的引用。
thread1 = new Thread(...)
创建一个新的Thread
实例,并在thread1
中存储对该实例的引用。
当您第二次执行时,您正在创建Thread
的第二个实例,但您没有破坏旧的实例。你只是覆盖了引用,这只是线程的"地址"。
但是,您确实有垃圾收集器,如果您没有引用它,它将清理第一个线程,因此,如果在某个地方,对第一个线程的引用仍然存在,(例如如果您将其分配给其他变量),它将不会被垃圾收集。
如果"Valid"是指"将编译"answers"将覆盖我的变量",那么是的,它是有效的。
然而,这是危险的。通过覆盖变量,如果您想对它执行Join
或任何其他操作,就会丢失对它的任何引用。如果您等待线程到Join
,顺便说一下,这比您的旋转等待更可取,这是一个安全的操作。