线程基础

1、创建线程

使用最基础的Thread来创建线程

PrintNumbers同时运行在主线程和另一个线程中

 

 static void Main(string[] args)
        {
            Thread t= new Thread(PrintNumbers);
            t.Start();
            PrintNumbers();
        }

        static void PrintNumbers()
        {
            System.Console.WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                System.Console.WriteLine("当前线程:" + Thread.CurrentThread.ManagedThreadId.ToString());
                System.Console.WriteLine(i);
            }
            System.Console.ReadLine();
        }

 

 2、线程等待(sleep)

 sleep,线程等待

 public void Main()
        {
            Thread t = new Thread(PrintNumberWidthDelay);
            t.Start();
            PrintNumbers();
        }

        private void PrintNumbers()
        {
            WriteLine("Starting...");
            for (int i = 1; i < 10; i++)
            {
                WriteLine(i);
            }
            ReadLine();
        }

        private void PrintNumberWidthDelay()
        {
            WriteLine("Starting...");
            for (int i = 0; i < 10; i++)
            {
                Thread.Sleep(TimeSpan.FromSeconds(2));
                WriteLine(i);
            }
        }

程序会先把主线程的执行完,然后再2秒执行另一个线程

3、线程等待,实现主线线程等待另一个线程执行完成,使用该线程的结果代码(join)

 public static void PringNumbersWithDelay()
        {
            WriteLine("starting...");
            for (int i = 0; i < 10; i++)
            {
                Sleep(TimeSpan.FromSeconds(2));
                WriteLine(i);
            }
        }

        public static void Print()
        {
            WriteLine("start...");
            Thread t = new Thread(PringNumbersWithDelay);
            t.Start();
            t.Join();//等待线程执行完毕
            WriteLine("Thread completed");
            ReadLine();
        }

 

4、线程终止(不推荐使用Abort来中止一个线程,可使用CancellationToken来取消线程的执行)

Thread t1 = new Thread(PringNumbersWithDelay);

  t1.Abort();//中止当前线程

5、检测线程状态(ThreadState)

 public static void PringNumbersWithDelay()
        {
            WriteLine("starting...");
            WriteLine(CurrentThread.ThreadState.ToString());
            for (int i = 0; i < 10; i++)
            {
                Sleep(TimeSpan.FromSeconds(2));
                WriteLine(i);
            }
        }

        static void DoNothing()
        {
            Sleep(TimeSpan.FromSeconds(2));
        }

        public static void Print()
        {
            WriteLine("Starting Program.....");
            Thread t1 = new Thread(PringNumbersWithDelay);
            Thread t2 = new Thread(DoNothing);
            WriteLine(t1.ThreadState.ToString());
            t2.Start();
            t1.Start();
            for (int i = 0; i < 30; i++)
            {
                WriteLine(t1.ThreadState.ToString());
            }
            Sleep(TimeSpan.FromSeconds(6));
            t1.Abort();
            WriteLine("A thread has been Aborted");
            WriteLine(t1.ThreadState.ToString());
            WriteLine(t2.ThreadState.ToString());
            ReadLine();
        }

 

转载于:https://www.cnblogs.com/zhaoxiaoyi/p/10505475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值