zoukankan      html  css  js  c++  java
  • Thread系列之Thread.Sleep(0)

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

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

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

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

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

    代码示例:

    代码
    staticvoid 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 =0; i <10; i++)
    {
    Console.WriteLine(
    "Main Thread:{0}",i);
    Thread.Sleep(
    0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
    }
    Console.Read();
    }
    void ThreadProc()
    {
    for (int i =0; i <10; i++)
    {
    Console.WriteLine(
    "ThreadProc:{0}",i);
    }
    }
    staticvoid 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 =0; i <10; i++)
    {
    Console.WriteLine(
    "Main Thread:{0}",i);
    Thread.Sleep(
    0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
    }
    Console.Read();
    }
    void ThreadProc()
    {
    for (int i =0; i <10; i++)
    {
    Console.WriteLine(
    "ThreadProc:{0}",i);
    }
    }
    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 =0; i <10; i++)
    {
    Console.WriteLine(
    "Main Thread:{0}",i);
    Thread.Sleep(
    0);//这个的意思只不过是让当前线程停顿一下,使得其他线程和他再次重新抢占资源
    }
    Console.Read();
    }
    void ThreadProc()
    {
    for (int i =0; i <10; i++)
    {
    Console.WriteLine(
    "ThreadProc:{0}",i);
    }
    }

    执行结果:

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

    再执行一下,看下结果:

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

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

  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/xyqCreator/p/2854460.html
Copyright © 2011-2022 走看看