多线程——创建新线程

简介:      一,简单单线程             线程是代码的执行序列或者执行路径。线程与进程的概念有一些类似,它类似于一个轻量级的进程;一个操作系统可以运行多个进程,一个进程内可以运行多个线程。


     一,简单单线程

           

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

 

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





如上图,本短程序从入口函数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方法,这两个方法分别定义了无参数的入口方法和有参数的入口方法。


             


             





      

目录
相关文章
|
16天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
27天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3
|
30天前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
58 0
|
1天前
|
安全 算法 Java
JavaSE&多线程&线程池
JavaSE&多线程&线程池
15 7
|
1天前
|
存储 缓存 NoSQL
为什么Redis使用单线程 性能会优于多线程?
在计算机领域,性能一直都是一个关键的话题。无论是应用开发还是系统优化,我们都需要关注如何在有限的资源下,实现最大程度的性能提升。Redis,作为一款高性能的开源内存数据库,因其出色的单线程性能而备受瞩目。那么,为什么Redis使用单线程性能会优于多线程呢?
14 1
|
23天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1
|
24天前
|
JavaScript 前端开发
JS 单线程还是多线程,如何显示异步操作
JS 单线程还是多线程,如何显示异步操作
22 2
|
1月前
|
消息中间件 Java 数据库连接
【C++ 多线程】C++ 多线程环境下的资源管理:深入理解与应用
【C++ 多线程】C++ 多线程环境下的资源管理:深入理解与应用
37 1
|
1月前
|
Java API C++
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
【C++ 与Qt 线程】C++ std::thread 与Qt qthread多线程混合编程
45 1
|
1月前
|
消息中间件 算法 开发者
【Qt面试题】多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制?
【Qt面试题】多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制?
20 1

相关实验场景

更多