c#多线程thread实例详解(代码片段)

yangxi1081 yangxi1081     2022-12-31     785

关键词:

1. Thread线程启动

由于ThreadStart是一个委托,所以可以简化写法

        static void Main(string[] args)
        
            Console.WriteLine("----------主程序开始,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            for(int i = 0;i< 5;i++)
            
                ThreadStart method = () => TestThread("无参数");
                Thread thread = new Thread(method);
                thread.Start();
            

            Console.WriteLine("----------主程序结束,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        

        static void TestThread(string name)
        
            Console.WriteLine("TestThread Start name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());

            long sum = 0;

            for (int i = 0; i < 10000000; i++)
            
                sum += i;
            
            Console.WriteLine("TestThread End name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
        

技术分享图片


2. Thread线程传递参数

上面的例子没专递没有参数的,现在开始传递参数

public delegate void ParameterizedThreadStart(object obj);

这个是Thread可以传递参数的方法委托,使用这个委托,可以传递参数。

        static void Main(string[] args)
        
            Console.WriteLine("----------主程序开始,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            for(int i = 0;i< 5;i++)
            
                ParameterizedThreadStart method = o => TestThread(o.ToString());
                Thread thread = new Thread(method);
                thread.Start("param" + i);
            

            Console.WriteLine("----------主程序结束,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        

        static void TestThread(string name)
        
            Console.WriteLine("TestThread Start name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());

            long sum = 0;

            for (int i = 0; i < 10000000; i++)
            
                sum += i;
            
            Console.WriteLine("TestThread End name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
        

技术分享图片


3. Thread线程等待

有时候,主线程需要等待子线程执行完后在执行,Thread的线程等待我们使用join()来实现

        static void Main(string[] args)
        
            Console.WriteLine("----------主程序开始,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            List<Thread> list = new List<Thread>();
            for(int i = 0;i< 5;i++)
            
                ParameterizedThreadStart method = o => TestThread(o.ToString());
                Thread thread = new Thread(method);
                thread.Start("param" + i);
                list.Add(thread);
            
            foreach (var t in list)
            
                t.Join();
            
            Console.WriteLine("----------主程序结束,线程ID是0-----------------", Thread.CurrentThread.ManagedThreadId);

            Console.Read();
        

        static void TestThread(string name)
        
            Console.WriteLine("TestThread Start name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());

            long sum = 0;

            for (int i = 0; i < 10000000; i++)
            
                sum += i;
            
            Console.WriteLine("TestThread End name:0 当前线程id:1 当前时间:2", name, Thread.CurrentThread.ManagedThreadId, DateTime.Now.ToString());
        

技术分享图片


4. Thread线程获取返回值

Thread没发获取返回值,请注意


5. Thread线程回调

Thread没有回调,我们自定义一个回调

        private void ThreadCallBack(ThreadStart method, Action callback)
        
            ThreadStart threadStart = () =>
            
                method.Invoke();
                callback.Invoke();
            ;
            Thread thread = new Thread(threadStart);
            thread.Start();
        




c++多线程std::thread详解(代码片段)

...d::thread构造函数三、其他成员函数四、传递临时参数作为线程对象的注意事项4.1解决办法:4.2原因分析4.3总结五、传递类对象、智能指针作为线程参数5.1修改子线程中的对象,不会影响主线程中的对象5.2传递智能指针参考链接:... 查看详情

多线程详解(代码片段)

多线程详解1线程简介2线程实现(重点)3线程状态4线程同步(重点)5线程通信问题6高级主题Java.Thread【狂神说Java】多线程详解1线程简介任务,进程,线程,多线程2线程实现(重点)packagecom.yangbocsu.demo1;//创建线程方式一ÿ... 查看详情

python多线程详解(代码片段)

概念线程是处理器调度和分配的基本单位,进程则作为资源拥有的基本单位。每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源组成。线程是进程内部的一个执行单元。每一个进程至少有一个主执行线程,它无... 查看详情

java多线程详解(代码片段)

多线程创建方式Thread类定义一个子类MyThread继承线程类Java.lang.Thread,重写run()方法创建MyThread对象调用线程对象的start()方法启动线程(启动后还是执行run方法)优缺点优点:编码简单缺点:线程类已经继承Thread,无法继承其他类... 查看详情

c#异步编程----thread(代码片段)

一、问题由来多线程能实现的基础:  1、CPU运行速度太快,硬件处理速度跟不上,所以操作系统进行分时间片管理。这样,宏观角度来说是多线程并发 ,看起来是同一时刻执行了不同的操作。但是从微观角度来讲,同一... 查看详情

c#进阶c#多线程(代码片段)

...0【C#进阶】C#泛型21【C#进阶】C#匿名方法文章目录前言1、线程与多线程的基本概念2、创建并使用线程3、检索线程对象4、前台线程和后台线程5、Thread类的属性和方法结语前言🐪hello大家好,我是哈桑c,本文为大家介... 查看详情

java创建线程实例详解(代码片段)

....继承Thread类,并重写run方法。run方法里面的逻辑就是线程要执行的逻辑。2.创建子类的对象实例。3.必须要使用对象实例的start方法启动该线程,不能直接使用run方法。publicclassMyThreadextendsThread@Overridepublicvoidrun()for(inti&#... 查看详情

java创建线程实例详解(代码片段)

....继承Thread类,并重写run方法。run方法里面的逻辑就是线程要执行的逻辑。2.创建子类的对象实例。3.必须要使用对象实例的start方法启动该线程,不能直接使用run方法。publicclassMyThreadextendsThread@Overridepublicvoidrun()for(inti&#... 查看详情

详解python中的多线程(代码片段)

文章目录1.threading的一些功能介绍2.线程的实现——函数和类(1)函数方式实现多线程(2)类的方式实现多线程3.守护线程与同步线程(1)非守护线程——默认线程(2)守护线程(3)同步... 查看详情

[c#]多线程总结(结合进度条)(代码片段)

线程生命周期未启动状态:当线程实例被创建但Start方法未被调用时的状况。就绪状态:当线程准备好运行并等待CPU周期时的状况。不可运行状态:已经调用Sleep方法已经调用Wait方法通过I/O操作阻塞死亡状态:当线程已完成执行... 查看详情

异步多线程thread(代码片段)

Theread概念 C#对线程对象的一个封装(密封类)类库 Thread实例化及调用 第一种:  只是简单的把需要线程执行的方法传递到ThreadThreadthread=newThread(testMethod);//实例化Thread  thread.Start();//开启线程,执行方法。&... 查看详情

threading多线程模块(代码片段)

threading多线程模块基本使用  Python中提供了threading模块用来实现线程并发编程,使用方法有两种,一种是将threading模块下的Therad类进行实例化的方式实现,一种是通过继承threading模块下的Therad类并覆写run()方法实现。 实例... 查看详情

初识多线程(代码片段)

初始Java多线程1)线程的创建(五种方式)1.创建一个继承Thread的类2.创建实现Runnable接口的类3.创建Thread实例,使用匿名内部类4.创建Thread实例,在Thread类的构造方法中传入一个Runnable实例创造一个Runnable的匿名... 查看详情

多线程详解---(多案例实战)(代码片段)

多线程1、区分单线程和多线程单线程:就像是做饭,洗衣服,煮水,一个一个进行多线程:在单线程的基础上,可以考虑煮水的时候,洗衣服节约时间packagecom.kong.thread;//创建线程,重写run方法࿰... 查看详情

多线程详解_1(代码片段)

p1-p10的内容1:多线程,进程,多任务       2:创建线程的三种方式   2.1:继承Thread类  1packageThread;23/**4*authorliulei5*data5.236*since1.87*version1.08*Description继承Thread实现线程9*/10publicclasstestThre... 查看详情

java多线程分析案例(代码片段)

1.多线程的创建方式(1)、继承Thread类:但Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程... 查看详情

python多线程并发(代码片段)

单线程执行python的内置模块提供了两个内置模块:thread和threading,thread是源生模块,threading是扩展模块,在thread的基础上进行了封装及改进。所以只需要使用threading这个模块就能完成并发的测试实例创建并启动一个单线程importthr... 查看详情

java进程,多线程详解(代码片段)

...际上,CPU每一段时间只能运行一个应用程序。 进程与线程一个操作系统可以有多个进程,进程可以简单的看做是正在执行中的应用程序。进程是多个线程的集合,一个进程中至少有一个线程,我们知道,代码是从上往下执行... 查看详情