Thread系列之Thread.Sleep(0)
线程这一概念,可以理解成进程中的一个小单元。这个单元是一个独立的执行单元,但是与进程中的其他线程共享进程中的内存单元。
由于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(); ; i < ; i++) { Console.WriteLine("Main Thread:{0}",i); Thread.Sleep();//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源 } Console.Read(); } void ThreadProc() { ; i < ; i++) { Console.WriteLine("ThreadProc:{0}",i); } }
执行结果:
可以看到 当主线程执行了一次循环时,Sleep(0)了一下,使得资源重新在两个线程中分配了一下。另一个线程抢占到资源并执行。
再执行一下,看下结果:
可以看到 这次重新分配资源时,先是主线程抢到了资源执行一段时间,之后是另一个线程执行。
从执行结果可以看出,Thread.Sleep(0) 的真正作用,同时也可以看出多线程之间是交替执行的。
转自:http://www.csharpwin.com/csharpspace/12365r7923.shtml
Thread系列之Thread.Sleep(0)的更多相关文章
- Thread系列——Thread.Sleep(0)
转载自:http://www.cnblogs.com/ATually/archive/2010/10/21/1857261.html 线程这一概念,可以理解成进程中的一个小单元.这个单元是一个独立的执 ...
- Java Thread系列(四)线程通信
Java Thread系列(四)线程通信 一.传统通信 public static void main(String[] args) { //volatile实现两个线程间数据可见性 private ...
- Java Thread系列(三)线程安全
Java Thread系列(三)线程安全 一.什么是线程安全 线程安全概念:当多个线程访问某一个类(对象或方法)时,这个类始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 线程安全来 ...
- Java Thread系列(二)线程状态
Java Thread系列(二)线程状态 一.线程的五种状态 新建状态(New):新创建了一个线程对象,尚未启动. 就绪状态(Runnable):也叫可运行状态.线程对象创建后,其他线程调用了该对象的 ...
- Java Thread系列(一)线程创建
Java Thread系列(一)线程创建 Java 中创建线程主要有三种方式:继承 Thread.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实 ...
- Java Thread系列(十)Future 模式
Java Thread系列(十)Future 模式 Future 模式适合在处理很耗时的业务逻辑时进行使用,可以有效的减少系统的响应时间,提高系统的吞吐量. 一.Future 模式核心思想 如下的请求 ...
- Java Thread系列(九)Master-Worker模式
Java Thread系列(九)Master-Worker模式 Master-Worker模式是常用的并行设计模式. 一.Master-Worker 模式核心思想 Master-Worker 系统由两 ...
- Java Thread系列(十)生产者消费者模式
Java Thread系列(十)生产者消费者模式 生产者消费者问题(producer-consumer problem),是一个多线程同步问题的经典案例.该问题描述了两个共亨固定大小缓冲区的线程-即所 ...
- Java Thread系列(六)volatile
Java Thread系列(六)volatile volatile 关键字具备可见性,不具备原子性.主要作用是使变量在多个线程间可见.但不具备原子性(同步性),可以算一个轻量级的 synchroniz ...
随机推荐
- 如何处理C#的HttpWebResponse的GetResponse中的超时异常
程序中,有时会遇到超时的异常,需要进行处理,用一般的try...catch(Exception ex)...会发现ex没有status属性,此时使用WebException捕获异常: try { re ...
- ubuntu 搭建maven库 2.14.2-01并配置离线索引文件
前提 安装JDK版本1.8或者以上 1 下载 http://www.sonatype.org/nexus/archived/ 选择相应的版本 2 复制到/usr/local 下解压 sudo cp ...
- 对ToString("X2 ")的理解
/// <summary> /// 将byte型转换为字符串 /// </summary> /// <param name=&q ...
- 一个比较综合的项目--》>图片缓存,下拉刷新等
在办公室电脑(E:\workspace\23\Collections)
- 初识reactJs 相关
喽了一眼阮一峰老师的react文章,感觉写的挺棒,这篇只是按照自己思路屡一遍,纯属自学笔记,不承担社会暴乱责任.前几天,打算学vuejs,师兄给了一句话的点播,感觉很醍醐灌顶.总结下,所 ...
- 封装captcha类 -- 画图四
<?php // 验证码类 class Captcha{ //属性 private $width; private $height; private $length; private $line ...
- jquery.hover()函数使用
<script> $(document).ready(function (t) { $(".wadver li").hover(function(event) { $( ...
- Mysql 根据时间戳、时间按年月日分组统计
create_time时间格式 SELECT DATE_FORMAT(create_time,'%Y%u') weeks,COUNT(id) COUNT FROM role GROUP BY week ...
- Java—工厂模式
工厂模式: public interface Cookie { public abstract void run (); } public abstract class CookieFactory { ...
- javaweb学习总结 servlet开发(一)
转载:http://www.cnblogs.com/xdp-gacl/p/3760336.html 这里主要是将其加入自己的理解过一遍. 这里的代码全在eclipse java ee中执行的. 一.s ...