多线程——创建新线程


     一,简单单线程

           

线程是代码的执行序列或者执行路径。线程与进程的概念有一些类似,它类似于一个轻量级的进程;一个操作系统可以运行多个进程,一个进程内可以运行多个线程。每个应用程序至少运行在一个线程上。当只有一个线程时,称作单线程应用程序,该线程由系统自动创建。

 

下面看一个简单单线程例子:





如上图,本短程序从入口函数main进入,然后一次执行到结束。


执行main方法的线程通常被成为主线程,主线程的入口也是应用程序的起始点。对于单线程的应用程序来说,代码的执行是顺序的。





但是在多线程中,当新线程被手动开启之后,主线程将不再等待被开启的新线程,直接执行后面的代码。




    二,创建新线程入口方法

                 

             下面来介绍两种为两种入口方法来进入新线程:



            首先,引入线程的基本操作类:





                            


       下面是创建线程的方法:



namespace workerThreadTest
{
    class Program
    {
        static void Main(string[] args)
        {

            #region ThreadStart定义无参数的入口方法

                //ThreadStart ts = new ThreadStart(ThreadEntry);//新建立线程的入口
                //Thread worker = new Thread(ts);
                //worker.Start();  //调用Thread的start方法启动线程;
                start方法是非阻塞的,被调用之后会立即返回
                调用start后,新线程并非立即执行,这取决于操作系统的线程管理策略,
                只不过这个时间非常短,感觉上好像新线程立即执行了。

                //Console.WriteLine("main thread ends");
                //Console.ReadKey();
            
            #endregion


            #region ParameterizedThreadStart委托

            //ParameterizedThreadStart定义的方法参数为object类型,因此在线程的入口方法ThreadEntry内部需要进行一下类型转换

                ParameterizedThreadStart ts = new ParameterizedThreadStart(ThreadEntry);
                Thread worker = new Thread(ts);
                string[] obj = { "item3","item4"};
                worker.Start(obj);  //开启有参数线程



                Console.WriteLine("main thread ends");
                Console.ReadKey();


                
            #endregion


        }

        static void ThreadEntry(object obj)
        {

            ShareResource resource = new ShareResource();
            string[] itemArray = (string[])obj;
            foreach (string item in itemArray)
            {
                resource.Add(item);
            }
        
        
        }

        //要开启的新线程
        static void ThreadEntry() {

            ShareResource resource = new ShareResource();
            resource.Add("item");//加入资源

        }
    }


    public class ShareResource
    {
        public List<string> list = new List<string> { "Item0", "Item1", "Item2" };

        public void Add(string item)
        {
            Console.WriteLine("Add:" + item);
            list.Add(item);
        }

    }

   
}

     

         创建一个新线程可以使用上述两种方法:ThreadStart方法和ParameterizedThreadStart方法,这两个方法分别定义了无参数的入口方法和有参数的入口方法。


             


             





      

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水田如雅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值