我现在想知道一点。我只是阅读了一些关于线程的信息并在那里登陆:任务与线程差异[重复]在这里来自Jacek的stackoverflow(抱歉无法创建一个链接,因为我只能创建2名声望< 10)
来自MoonKnight的第一条评论带我到那里:albahari.com/threading
我已经接受了代码并稍微更改了一下,以便更好地了解正在发生的事情。这是我改变的代码:
static void Main()
{
Thread t = new Thread(WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 10; i++) { System.Threading.Thread.Sleep(1); Console.Write(i); };
Console.ReadLine();
}
static void WriteY()
{
for (int y = 0; y < 10; y++) { System.Threading.Thread.Sleep(1); Console.Write(y); };
Console.ReadLine();
}
我期望发生的事情(以及大多数时间发生的事情)是这样的: 好线程:
但这是我想知道的事情(它绝对随机并承诺相同的代码):
奇迹线程:
我的问题:
1.如果有不同的数字,线程应该总是在同一时间运行,这怎么会发生呢?
2.所有这一切都变得越来越疯狂,睡眠时间越短,所以如果你完全删除它就绝对会随机掉落
答案 0 :(得分:0)
当您在主线程上执行第一个循环并在单独的线程上启动WriteY()
时,绝对无法预测一个线程中的事件相对于另一个线程中的事件发生的顺序。
我写了一些测试来证明这一点。 Here's one。并here's another。
这两个例子的特点是,它们经常以“预期”的顺序运行,但有时它们不会。
这告诉了我们关于多线程操作的一些事情: