zoukankan      html  css  js  c++  java
  • C#线程

    一、通过委托开启一个线程




    当方法需要参数的时候(使用Action委托)




    当方法需要参数并具有返回值的时候(需要使用Func委托)

    取得异步线程的返回值方式

    控制线程的检测频率——笨办法——采用轮询机制

    通过等待句柄检测——缺点是需要提前设置好等待时长

    检测线程状态——常规方式——消息回调机制(注意回调函数的参数是固定的,必须按照这个格式写)

    如果需要获得异步线程的返回值,只需要加上BeginInvoke最后一个参数即可







    二、通过Thread类开启一个线程


    可以将上图的方式改成直接使用Lambda表达式的方式:



    传递参数——在线程函数中声明object类型的形参,实例化线程的方式跟上面一样,但在开启线程的时候需要在Start里面传递所需要的参数:





    通过自己创建类,开启线程:






    三、前台线程与后台线程

    默认创建的线程都是前台线程,除非使用线程池或者将默认创建的前台线程手动设置成后台线程。后台线程会在主程序结束时就立即结束,而前台线程则会牵制主线程的进行,致使主线程会一直等待所有的前台线程执行完毕再结束。



    线程池

    一般线程池内执行的都是小任务;用线程池创建出来的线程默认情况下都是后台线程!

    注意!(1)已入线程池中的线程是没法被设成前台线程的!!!(2)不能修改线程池中线程的优先级或名称!!!(3)入池的线程只适合做一些事件开销小的任务!!!





    四、通过任务的方式开启线程

    开启任务的第一种方式

    开启任务的第二种方式

    连续任务







    五、线程资源管理/线程争用/线程之间抢资源

    抢资源的事情由此产生,使用线程锁/lock来解决:

    为了防止死锁产生,需要在编程的开始阶段设计好锁的具体顺序并在之后的开发中忠于这个顺序进行加锁。










    作者:艾孜尔江

  • 相关阅读:
    mongo相关
    grafana相关
    问题与解决
    蓝鲸社区版6.0填坑指南
    go环境
    docker相关
    gitlab相关
    LRU(Least recently used,最近最少使用)
    LRU:最近最久未使用
    学习大神笔记之 “MyBatis学习总结(一)”
  • 原文地址:https://www.cnblogs.com/ezhar/p/12866905.html
Copyright © 2011-2022 走看看