转载自:http://www.cnblogs.com/ATually/archive/2010/10/21/1857261.html

线程这一概念,可以理解成进程中的一个小单元。这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元。

由于Cpu资源是有限的,所以进程中的多个线程要抢占Cpu,这也导致进程中的多个线程交替执行。

Thread.Sleep() 本身的含义是当前线程挂起一定时间。

Thread.Sleep(0) MSDN上的解释是挂起此线程能使其他等待线程执行。这样的解释容易导致误解,我们可以这样理解,其实是让当前线程挂起,使得其他线程可以和当前线程再次的抢占Cpu资源。

代码示例:

 代码

  static void Main(string[] args)
{
Console.WriteLine("Now main thread begin");
Program p=new Program();
Thread t = new Thread(new ThreadStart(p.ThreadProc));
t.Start();
for (int i = ; i < ; i++)
{
Console.WriteLine("Main Thread:{0}",i);
Thread.Sleep();//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
}
Console.Read();
}
void ThreadProc()
{
for (int i = ; i < ; i++)
{
Console.WriteLine("ThreadProc:{0}",i);
}
}

执行结果:

可以看到 当主线程执行了一次循环时,Sleep(0)了一下,使得资源重新在两个线程中分配了一下。另一个线程抢占到资源并执行。

再执行一下,看下结果:

可以看到 这次重新分配资源时,先是主线程抢到了资源执行一段时间,之后是另一个线程执行。

从执行结果可以看出,Thread.Sleep(0) 的真正作用,同时也可以看出多线程之间是交替执行的。

最新文章

  1. Linux中设定umask的作用
  2. 用Canvas写桌球游戏!!!
  3. GridView导出excel格式问题
  4. 点击自动显示/隐藏DIV代码。(简单实用)
  5. ACM/ICPC 之 BFS-简单障碍迷宫问题(POJ2935)
  6. PCH文件配置路径
  7. quick -- 创建精灵和动作
  8. iOS 公司开发者账号申请
  9. Ajax 填充 前端页面
  10. PHP中使用CURL实现GET和POST请求
  11. Caching Best Practices--reference
  12. windows 配置免安装 node
  13. 位运算 (&amp;|)与--或 一位数组表示多种意思~~ 与--或
  14. System Request 进入KDB模式过程详解
  15. FFmpeg API 变更记录
  16. vue中使用echarts来绘制世界地图和中国地图
  17. 2.23 js处理日历控件(修改readonly属性)
  18. C#线程、前后台线程
  19. stage.focus后 有黄色边框怎么去掉
  20. 如何使用阿里巴巴iconfont矢量图片

热门文章

  1. 深入了解Qt(二)之元对象系统(Meta-Object System)
  2. 复杂的sql 一对多查询
  3. Linux下对于inode的理解
  4. 四、Struts2的执行过程和原理
  5. javaSE第十四天
  6. vim插件之SnipMate
  7. C# [STAThread]
  8. HTML5 对于手机页面长按会粘贴复制的禁用 (解决方案)
  9. dispatchTouchEvent &amp; onInterceptTouchEvent &amp; onTouchEvent
  10. MongoDB数据库的主从配对与迁移示例