栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C#多线程编程技术——多线程操作

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#多线程编程技术——多线程操作

线程,有时被称为轻量进程(LightWeight Process,LWP),是程序执行流的最小单元。线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。

一、进程与线程

进程(Process)和线程(Thread)是操作系统 的基本概念,但是它们比较抽象并且不容易掌握。可以将进程理解为程序在计算机上的一次执行活动,而线程则是进程的一个实体。执行线程就体现程序的真实执行情况。

进程的概念

1、进程

进程是程序在计算机上的一次执行活动。运行一个程序就相当于启动一个进程。Windows系统利用进程把工作划分为多个独立的区域,每个应用程序实例对应一个进程。每个进程所占用的资源都是互相独立的。

进程资源包括:

(1)一个进程堆;

(2)一个或多个线程;

(3)一个虚拟地址空间,该空间独立于其它进程的地址空间;

(4)一个或多个代码段,包括.dll中的代码;

(5)一个或多个包含全局变量的数据段;

(6)环境字符串,包括环境变量信息;

(7)其他资源,例如打开的句柄、其它的堆等。

2、多进程

多进程就是在同一计算机系统 中,同一个时刻允许两个或两个以上的进程处于运行状态。多进程具有以下特点:

(1)进程间互相独立,可靠性高。

(2)进程之间不共享数据,没有锁问题,结构简单。

(3)需要跨进程边界,多进程调度开销较大。

线程的概念

1、线程

线程是程序中的一个执行流,每个线程都有自己的专用寄存器(栈、指针、程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数。

注意:一个进程可以有多个线程,一个线程必须有一个父进程,一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。

2、多线程

多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务。

(1)多线程具有以下优点。

可以提高CPU的利用率。在多线程程序中,一个线程必须等待的时候,CPU可以运行其他的线程而不是等待,这样就大大提高了程序的效率。

(2)多线程具有以下缺点。

        ① 线程也是程序,所有线程需要占用内存,线程越多占用内存也越多;

        ② 多程序需要协调和管理,所以需要CPU时间跟踪线程;

        ③ 线程之间对共享资源的访问会相互影响,必须 解决竞用共享资源的问题

        ④ 线程太多会导致控制太复杂,最后可能造成很多Bug。

3、线程的生命周期

线程生命周期开始于System.Threading.Thread类的对象被创建时,结束于线程被终止或完成执行时。

下面列出了线程生命周期中的各种状态

(1)未启动状态:当线程实例被创建,但Start方法未被调用时的状况。

(2)就绪状态:当线程准备好运行并等待CPU周期时的状况。

(3)不可运行状态:已经调用Sleep方法、Wait方法或者通过I/O操作阻塞时,线程是不可运行的。

(4)死亡状态:当线程已完成执行或已中止时的状况。

在C#中,Thread类用于线程的工作。它允许创建并访问多线程应用程序 中的单个线程。进程中第一个被执行的线程称为主线程。

编写程序,获取当前的主线程,并为其命名。

可以通过Thread类的静态属性CurrentThread获取当前执行的线程,然后通过Name属性赋值”MainThread“。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Thread th=Thread.CurrentThread;
            th.Name = "MainThread";
            Console.WriteLine("This is { 0 }", th.Name);
            Console.ReadLine();
        }
    }
}

 完整代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Thread th=Thread.CurrentThread;
            th.Name = "MainThread";
            Console.WriteLine("This is {0}", th.Name);
            Console.ReadLine();
        }
    }
}

运行结果:

Thread类

在.NET Framework中,所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。

Thread类的属性及说明
属性说明
CurrentContext
CurrentCulture
CurrentPrinciple
CurrentThread
CurrentUICulture
ExecutionContext
IsAlive
IsBackground
IsThreadPoolThread
ManagedThreadId
Name
Priority
ThreadState

Thread类的方法及说明
方法说明
Abort在调用此方法的线程上引发ThreadAboutException,以开始终止此线程的过程。调用此方法通常会终止线程
GetApartmentState返回表示单元状态的ApartmentState值
GetDomain返回当前线程正在其中运行的当前域
GetDomainID返回唯一的应用程序域标识符
Interrupt中断处于WaitSleepJoin线程状态的线程
Join在此实例表示的线程终止前,阻止调用线程
ResetAbort取消当前线程所请求的Abort(Object)
SetApartmentState在线程启动前设置其单元状态
Sleep将当前线程挂起指定的时间
SpinWait导致线程等待由iterations参数定义的时间量
Start使线程得以按计划执行
Suspend挂起线程,或者如何线程已挂起,则不起作用
VolatileRead读取字段值。无论处理器的数目或处理器缓存的状态如何,该值都是由计算机的任何处理器写入的最新值
VolatileWrite立即向字段写入一个值,以使该值对计算机中的所有处理器都可见

二、线程的基本操作

通过使用Thread类,可以对线程进行创建、休眠、挂起、恢复、终止及设置优先权等操作。

创建线程 线程休眠 线程的挂起与恢复 终止线程 线程的优先级

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1017134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号