转载自: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) 的真正作用,同时也可以看出多线程之间是交替执行的。

Thread系列——Thread.Sleep(0)的更多相关文章

  1. Java Thread系列(四)线程通信

    Java Thread系列(四)线程通信 一.传统通信 public static void main(String[] args) { //volatile实现两个线程间数据可见性 private ...

  2. Java Thread系列(三)线程安全

    Java Thread系列(三)线程安全 一.什么是线程安全 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 线程安全来 ...

  3. Java Thread系列(二)线程状态

    Java Thread系列(二)线程状态 一.线程的五种状态 新建状态(New):新创建了一个线程对象,尚未启动. 就绪状态(Runnable):也叫可运行状态.线程对象创建后,其他线程调用了该对象的 ...

  4. Java Thread系列(一)线程创建

    Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实 ...

  5. Java Thread系列(十)Future 模式

    Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...

  6. Java Thread系列(九)Master-Worker模式

    Java Thread系列(九)Master-Worker模式 Master-Worker模式是常用的并行设计模式. 一.Master-Worker 模式核心思想 Master-Worker 系统由两 ...

  7. Java Thread系列(十)生产者消费者模式

    Java Thread系列(十)生产者消费者模式 生产者消费者问题(producer-consumer problem),是一个多线程同步问题的经典案例.该问题描述了两个共亨固定大小缓冲区的线程-即所 ...

  8. Java Thread系列(六)volatile

    Java Thread系列(六)volatile volatile 关键字具备可见性,不具备原子性.主要作用是使变量在多个线程间可见.但不具备原子性(同步性),可以算一个轻量级的 synchroniz ...

  9. Java Thread系列(五)synchronized

    Java Thread系列(五)synchronized synchronized锁重入 关键字 synchronized 拥有锁重入的功能,也就是在使用 synchronized 时,当线程等到一个 ...

随机推荐

  1. 注册码 myeclipse6.5-6.8

    package controllersli; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  2. JS常用的设计模式(14)—— 备忘录模式

    备忘录模式在js中经常用于数据缓存. 比如一个分页控件, 从服务器获得某一页的数据后可以存入缓存.以后再翻回这一页的时候,可以直接使用缓存里的数据而无需再次请求服务器. 实现比较简单,伪代码: var ...

  3. 优秀的富文本编辑器 Kindeditor

    <textarea name="txtbody" style="width:100%;height:320px;" > {$article.txt} ...

  4. URL重写以后发布到IIS找不到页面

    1.读取必须勾选,否则无法加载资源文件(img,css等) c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll

  5. Java设计模式(Design Patterns In Java)读书摘要——第1章 绪论

    为何需要模式 模式是做事的方法,是实现目标,研磨技术的方法.通俗点说,模式是为了解决某个行业的某个问题的有效的方法或技艺. 为何需要设计模式 为了提升代码的水准,是代码变得简洁而易用.模式是一种思想, ...

  6. 飞翔的圆(Flappy Bird)游戏源码

    这个源码是一个不错的休闲类的游戏源码,飞翔的圆(Flappy Bird)游戏源码V1.0,本项目是一个仿Flappy Bird的小游戏,只不过是把Flappy Bird里面的鸟替换成了简单的圆.感兴趣 ...

  7. Run JavaScript on your PeopleSoft pages conditionally

    Here, PeopleCode sets the logic that determines when the JavaScript code will run. This is not as si ...

  8. 学习笔记 - 数据绑定之knockout

    参考: http://www.cnblogs.com/TomXu/archive/2011/11/21/2257154.html http://knockoutjs.com/documentation ...

  9. linux 常用命令及技巧

    linux 常用命令及技巧 linux 常用命令及技巧:linux 常用命令总结: 一. 通用命令: 1. date :print or set the system date and time 2. ...

  10. js获取数组中的最大值最小值

    遍历方法: var tmp = [1,12,8,5]; var max = tmp[0]; for(var i=1;i<tmp.length;i++){ if(max<tmp[i])max ...