zoukankan      html  css  js  c++  java
  • C#-----创建线程的多种方式

       1.Thread

         Thread创建和控制线程,设置其优先级并获取其状态

    1.1 不带参数

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                Thread thread = new Thread(new ThreadStart(CreateThread));
                thread.Name = "线程一";
                thread.IsBackground = true;
                thread.Start();
            }
    
            static void CreateThread()
            {
                for (int i=1;i<=20;i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name+":"+i);
                }
            }
        }
    }

    1.2 带参ParameterizedThreadStart

     

    using System;
    using System.Threading;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                Thread thread = new Thread(new ParameterizedThreadStart(CreateThread));
                thread.IsBackground = true;
                thread.Start("线程二");
                Console.ReadLine();
            }
    
            static void CreateThread(Object threadName)
            {
                Thread.CurrentThread.Name = threadName.ToString();
                for (int i = 1; i <= 20; i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + ":" + i);
                }
            }
        }
    }

       2.Task

        Task类的表示单个操作不会返回一个值,通常以异步方式执行

    2.1 直接New创建

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                Task task = new Task(() =>
                {
                    Console.WriteLine("可以直接写代码,也可以调用方法");
                    CreateTask();
                });
                task.Start();
                Console.ReadLine();
            }
    
            static void CreateTask()
            {
                Thread.CurrentThread.Name = "线程一";
                for (int i = 1; i <= 20; i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + ":" + i);
                }
            }
        }
    }

     2.2 使用Factory工厂创建

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                //Factory提供对用于创建Task的工厂方法的访问
                Task.Factory.StartNew(() =>
                {
                    Console.WriteLine("可以直接写代码,也可以调用方法");
                    CreateTask();
                });
                Console.ReadLine();
            }
    
            static void CreateTask()
            {
                Thread.CurrentThread.Name = "线程一";
                for (int i = 1; i <= 20; i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + ":" + i);
                }
            }
        }
    }

     2.3 使用Run方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp5
    {
        class Program
        {
            static void Main(string[] args)
            {
                //将在线程池上运行的指定工作排队,并返回代表该工作的Task对象
                Task.Run(() =>
                {
                    Console.WriteLine("可以直接写代码,也可以调用方法");
                    CreateTask();
                });
                Console.ReadLine();
            }
    
            static void CreateTask()
            {
                Thread.CurrentThread.Name = "线程一";
                for (int i = 1; i <= 20; i++)
                {
                    Console.WriteLine(Thread.CurrentThread.Name + ":" + i);
                }
            }
        }
    }
  • 相关阅读:
    批量刷新远程物化视图的方法(备用)
    Oracle 11g中CTE应用示例
    PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案
    RHEL5.5 64位下安装Oracle 11g 64位安装前置条件的两种方法
    不良言论屏蔽方案探讨——自说自话方案
    AWWWB 网站克隆器 v2.0发布
    OneNote中到底能放多少种东西?
    Visual Studio 2010 旗舰版 安装问题小记
    WPF命中测试示例(一)——坐标点命中测试
    网页内嵌Windows Media Player播放器的多文件播放方法
  • 原文地址:https://www.cnblogs.com/fengfuwanliu/p/11233345.html
Copyright © 2011-2022 走看看