回 帖 发 新 帖 刷新版面

主题:线程的问题

看例子的时候看到这么一句话:
Thread.Sleep(1000);
请问可以直接调用Thread类的Sleep方法吗?难道不需要实例化一个Thread对象再调用?这样直接调用,到底是哪个线程睡觉呢?

回复列表 (共1个回复)

沙发

补充:经过查阅资料,貌似睡觉的是主线程(当前线程)。又有新的问题了,CPU在某一时刻是不是只能执行一个线程?还有,我的代码如下:
1 Alpha alpha = new Alpha();   
2 Thread myThread = new Thread(new ThreadStart(alpha.Beta));   
3 myThread.Start();   
4 while (!myThread.IsAlive) ;   
5 Thread.Sleep(3);     
6 myThread.Abort();     
7 myThread.Join();     
8 Console.WriteLine("Press any key to continue\n");     
9 Console.ReadKey();
这里Alpha类的Beta方法就是打印一句话。如果我把第5行改成睡1ms的话,屏幕上就只有Press any key to continue,而改成3ms的话,执行Beta方法似乎是概率性的。我猜想Thread.Start方法是不是只是把一个线程加入排队的行列。具体能不能执行,还需要看运气,也就是能不能争到资源。
另外,Join方法貌似也很匪夷所思。这里线程都Abort了,为啥还要Join呢?国人似乎很喜欢把Join翻译成堵塞,但是我觉得按照英文原意翻不是挺好的吗?不就是让一个线程“加入”另一个线程吗?百思不得其解。
望解答。

我来回复

您尚未登录,请登录后再回复。点此登录或注册