C# 多线程

多线程

线程的建立与启动
void fun() {
    // .. 执行耗时操作
}
var start = new ThreadStart(fun); // 创建线程入口
var thread = new Thread(start); // 创建线程
thread.Start();
线程的常用方法
方法 作用
Start 启动线程,分配给线程除了CPU之外的所有系统资源,并执行各种安全检查。调用后线程处于Unstarted状态
Join 当前线程阻塞直到调用这个方法的线程执行完毕
Sleep 休眠指定毫秒数,醒来后变为就绪态
Suspend 阻塞线程
Resume 恢复挂起的线程,进入就绪状态
Abort 永久删除线程的数据
Thread类的常用属性
属性 作用
CurrentThread 获取当前正在运行的线程
Name 线程名称
Priority 线程调度优先级 (Highest, AboveNormal, Normal, BelowNormal, Lowest
IsBackground 设置后台线程
IsAlive 线程如果启动且尚未正常终止,为true
ThreadState 指示当前线程的状态
给线程传递数据
public class Data {
    public string Message;
}
public void fun(object o) {
    // 做耗时的任务
}
var d = new Data { Message = "数据" }
new Thread(fun).Start(d);
public class MyThread {
    private string data;
    public MyThread(string data) {
        this.data = data;
    }
    public fun() {
        // ... 耗时
    }
}
var myThread = new MyThread("info");
new Thread(myThread.fun).Start();
后台线程
  • 默认情况下,Thread类创建的是前台线程,线程池的线程是后台线程
  • 只有一个前台线程在运行,进程就在运行,后台线程不能独立于前台线程运行
  • 后台线程适合完成后台任务,例如word的拼写检查器
  • 通过IsBackground属性可以设置线程为后台线程或者前台线程,也可以获取线程是后台线程还是前台线程
线程池

线程池主要特点:

  1. 如果线程池线程始终保持繁忙,队列中包含挂起的工作,线程池会在一段时间后创建另一个辅助线程
  2. 每个进程有且仅有一个线程池,第一次将回调方法排入队列时才会创建线程池
  3. 最大线程数是可以配置的,工作数量大于最大线程数,新入队的工作就要排队
  4. 线程池通常用于服务器应用程序,可以来一个请求分配一个线程执行,不会占用主线程。
public void fun(object state) {
    // ... 耗时
}

ThreadPool.GetMaxThreads(); // 获得最大线程数量
// 传入线程池中的回调方法是一个委托 public delegate void WaitCallBack(object state);
ThreadPool.QueueUserWorkItem(fun);

线程池限制</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值