C#网络编程 (三) 多线程概述

概述

一个运行的程序成为一个进程,同一个进程又可以分为多个独立运行的执行流,称为线程。

属性和方法

基本操作:启动线程 线程休眠 销毁线程 设置ThreadState属性 设置优先级和线程池
线程在System.Threading命名空间,其中的Thread用于创建和控制线程
常用属性

主要属性 描述
IsAlive 判断线程是否处于活动状态
IsBackground 获取或者设置一个值,指示某个线程是否为后台线程
IsThreadPoolThread 获取一个值,指示线程是否属于托管线程池
Name 获取或者设置线程的名称
Priority ThreadPriority枚举类型,代表线程优先级
ThreadState ThreadState枚举类型,代表当前线程的状态

主要方法

方法 描述
Start() 启动线程的执行
Suspend() 挂起线程,如果线程已经挂起,则不起作用
Resume() 继续执行已经挂起的线程
Interrupt() 终止处于Wait或者Sleep或者Join状态的线程
Join() 阻塞调用线程,直到某个线程终止为止
Sleep() 将大年线程阻塞制定的毫秒数
Abort() 终止线程的执行。终止后该线程不能通过Start来启动

ThreadPriority枚举类型 表示优先级
ThreadState枚举类型 指示状态
线程的创建和终止会消耗比较多的系统资源,当需要处理大量短小任务的线程时,应该采用线程池,预先创建多个线程,使程序的响应更快。通过System.Threading中的ThreadPool来实现

多线程及其简单应用

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

  • 线程也是程序,要占用内存,线程越多,占用内存越多
  • 线程需要协调管理,所以需要CPU时间跟踪线程
  • 线程之间对共享资源的访问会相互影响,必须解决竞争共享资源的问题
  • 线程太多会导致控制太复杂,最终可能会造成很多错误

一个线程的例子

该程序的功能是输出“1”和“0”

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

namespace exe3
{
    class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(new ThreadStart(m1));
            Thread thread2 = new Thread(new ThreadStart(m2));

            thread1.Priority = ThreadPriority.Highest;
            thread2.Priority = ThreadPriority.Normal;

            thread1.Start();
            thread2.Start();

            Console.ReadKey();
        }

        public static void m1() {
            for (int i = 0; i < 2000; i++) {
                if (i == 200)
                    Thread.Sleep(30);
                else
                    Console.Write("1");
            }
        }
        public static void m2()
        {
            for (int i = 0; i < 2000; i++)
            {
                if (i == 200)
                    Thread.Sleep(30);
                else
                    Console.Write("0");
            }
        }
    }
}

运行效果
C#网络编程 (三) 多线程概述_第1张图片

你可能感兴趣的:(C#,学习笔记,网络编程,线程,多线程)