我有以下代码创建 10 个线程,这些线程依次将消息写入控制台:
for (int i = 0; i < 10; i++)
{
{
Thread thread = new Thread((threadNumber) =>
{
for (int j = 0; j < 10; j++)
{
Thread.Sleep(200);
Console.WriteLine(string.Format("Thread: {0}, Line: {1}", threadNumber, j));
}
});
thread.Start(i);
}
}
我的理解是ParameterizedThreadStart
需要一个对象,该对象的引用副本被发送到线程。如果是这种情况,因为我没有i
在每个循环中制作本地副本,所有新线程都将指向相同的内存位置,这意味着某些线程号可能会“丢失”。虽然运行了这个(甚至针对大量线程/睡眠时间),但每个值i
都有自己的线程。谁能解释为什么?