• C#开启线程的四种方式


    1.异步委托开启线程

        public class Program
        {
            public static void Main(string[] args)
            {
                Action<int, int> a = add;
                a.BeginInvoke(3, 4, null, null);
                Console.WriteLine("执行线程");
                Console.ReadKey();
            }
            static void add(int a, int b)
            {
                Console.WriteLine(a + b);
            }
        }

    2.通过Thread类开启线程

        public class Program
        {
            public static void Main(string[] args)
            {
                Thread t1;
                Thread t2;
                t1 = new Thread(SetInfo1);
                t2 = new Thread(SetInfo2);
                t1.Start();
                //线程睡眠
                //t1.Join(1000);
                //挂起线程
                t1.Suspend();
                //继续执行线程
                t1.Resume();
                //结束线程
                //t1.Abort();
    
                t2.Start();
                Console.ReadKey();
            }
            //奇数线程
            public static void SetInfo1()
            {
                for (int i = 0; i < 100; i++)
                {
                    if (i % 2 != 0)
                    {
                        Console.WriteLine("奇数为" + i);
                    }
                }
            }
            //偶数线程
            public static void SetInfo2()
            {
                for (int i = 0; i < 100; i++)
                {
                    if (i % 2 == 0)
                    {
                        Console.WriteLine("偶数为" + i);
                    }
                }
            }
        }

    3.通过线程池开启线程

    //线程池可以看做容纳线程的容器;一个应用程序最多只能有一个线程池;ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程;
        //线程池的作用:
        //1、线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。
        //2、如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止
        public class Program
        {
            public static void Main(string[] args)
            {
                ThreadPool.QueueUserWorkItem(new WaitCallback(TestThreadPool), new string[] { "hjh" });
                Console.ReadKey();
            }
            public static void TestThreadPool(object state)
            {
                string[] arry = state as string[];//传过来的参数值
                int workerThreads = 0;
                int CompletionPortThreads = 0;
                ThreadPool.GetMaxThreads(out workerThreads, out CompletionPortThreads);
                Console.WriteLine(DateTime.Now.ToString() + "---" + arry[0] + "--workerThreads=" + workerThreads + "--CompletionPortThreads" + CompletionPortThreads);
            }
        }

    4.通过任务Task开启线程

    public class Program
        {
            public static void Main(string[] args)
            {
                Task task = new Task(DownLoadFile_My);
                task.Start();
                Console.ReadKey();
            }
            static void DownLoadFile_My()
            {
                Console.WriteLine("开始下载...线程ID:"+Thread.CurrentThread.ManagedThreadId);
                Thread.Sleep(500);
                Console.WriteLine("下载完成!");
            }
        }
  • 相关阅读:
    css之布局
    css之浮动
    白扯之聊聊我们的情怀
    Vue之指令
    Vue之vue.js声明式渲染
    AJAX经常遇到的那些问题
    HTTP之cookie技术
    正则表达式资料
    require.js资料
    AMD 和 CMD 的区别
  • 原文地址:https://www.cnblogs.com/dujian123/p/10876845.html
Copyright © 2020-2023  润新知