zoukankan      html  css  js  c++  java
  • 学习C#线程

    2016-12-17 

    无意间看到了关于C#线程的讲解。经过一下午的学习后,慢慢的对线程也有了一定的理解。这里讲解的是最基础的内容,包括线程的创建、睡眠、等待、终止。

    实验环境:Visual studio 2010.

    使用语言:C#

    内容:创建、睡眠、等待、中止线程

    1.创建新线程对象 Thread t=new Thread();

     1 using System;
     2 using System.Threading;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 
     7 namespace 线程学习
     8 {
     9     class Program
    10     {
    11         static void PrintNumbers()
    12         {
    13 
    14             Console.WriteLine("Starting...");
    15             for (int i = 1; i < 10; i++)
    16             {
    17                 Console.WriteLine(i);
    18             }
    19         }
    20 
    21         static void Main(string[] args)
    22         {
    23             Thread t = new Thread(PrintNumbers);
    24             t.Start();
    25             PrintNumbers();
    26         }
    27     }
    28 }
    View Code

    通过Thread t=new Thread创建新对象后,t为子线程,t.Start()开始执行子线程,子线程执行构造对象中的PrintNumber()函数,父线程执行下一行的PrintNumbers()函数,两线程并发,所以结果不定。

    2.线程睡眠   调用Slee()函数,选择让线程暂时“睡眠“

    using System;
    using System.Threading;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace 线程学习
    {
        class Program
        {
            static void PrintNumbers()
            {
                Console.WriteLine("Starting...");
                for (int i = 1; i < 10; i++)
                {
                    Console.WriteLine(i+"父线程");
                }
            }
            static void PrintNumbersWithDelay()
            {
                Console.WriteLine("Starting...");
                for (int i = 1; i < 10; i++)
                {
                    Thread.Sleep(TimeSpan.FromSeconds(1));
                    Console.WriteLine(i+"子线程");
                }
            }
    
            static void Main(string[] args)
            {
                Thread t = new Thread(PrintNumbersWithDelay);
                t.Start();
                PrintNumbers();
            }
        }
    }
    View Code

    创建线程后,子线程t执行PrintNumbersWithDelay()函数,其中每循环一次就睡眠一秒,父线程执行下一行的PrintNumbers()函数,两线程并发执行。

    3.线程等待 调用join()函数,让线程按照想要的顺序执行

     1 using System;
     2 using System.Threading;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 namespace 线程学习
     7 {
     8     class Program
     9     {
    10         static void PrintNumberWithDelay()
    11         {
    12             Console.WriteLine("Starting...");
    13             for (int i = 1; i < 10; i++)
    14             {
    15                 Thread.Sleep(TimeSpan.FromSeconds(1));
    16                 Console.WriteLine(i);
    17             }
    18         }
    19         static void PrintNumbers()
    20         {
    21             Console.WriteLine("Starting...");
    22             for (int i = 1; i < 10; i++)
    23             {
    24                 Console.WriteLine(i);
    25             }
    26         }
    27         static void Main(string[] args)
    28         {
    29             Console.WriteLine("Starting...");
    30             Thread t = new Thread(PrintNumberWithDelay);
    31             t.Start();
    32             t.Join();
    33             PrintNumbers();
    34             Console.WriteLine("Thread completed");
    35         }
    36     }
    37 }
    View Code

    创建线程后,t.join()之后的语句(即父线程)必须等待之前的语句执行完后,才能执行。

    4.线程终止 调用Abort()函数,杀死该线程。

    using System;
    using System.Threading;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    namespace 线程学习
    {
        class Program
        {
            static void PrintNumbers()
            {
                Console.WriteLine("Starting...");
                for (int i = 1; i < 10; i++)
                {
                    Console.WriteLine(i);
                }
            }
            static void PrintNumberWithDelay()
            {
                Console.WriteLine("Starting...");
                for (int i = 1; i < 10; i++)
                {
                    Console.WriteLine(i);
                    Thread.Sleep(TimeSpan.FromSeconds(1));
    
                }
            }
    
            static void Main(string[] args)
            {
                Console.WriteLine("Starting Program..");
                Thread t = new Thread(PrintNumberWithDelay);
                t.Start();
                t.Abort();
                Console.WriteLine("A thread has been aborted");
                t = new Thread(PrintNumbers);
                t.Start();
                PrintNumbers();
            }
        }
    }
    View Code

    使用Abort()结束子线程。后面的代码跟前面例一类似

  • 相关阅读:
    php排序之冒泡排序
    php排序之快速排序
    php 获取某个月的周次信息
    php 获取目录下文件列表
    计算某个生日是哪个星座的算法
    小物件之radio单选列表
    小物件之select单选下拉列表
    ajax跨域问题
    微信开发第6章 通过accesstoken获取用户粉丝列表
    微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注
  • 原文地址:https://www.cnblogs.com/yyagrt/p/6188800.html
Copyright © 2011-2022 走看看