线程的基本知识点

线程

 只要有一个前台线程在运行,应用程序的进程就在运行,如果多个前台线程在运行,

 但main方法结束了,应用程序的进程仍然在运行,直到所有的前台线程完成其任务为止

 默认情况下,用Thread类创建的线程是前台线程。线程池的线程总是后台线程

 开启线程方式

 1.通过委托开启线程

    系统委托方式:Action<>,Func<>   -->绑定方法,开启线程就会与主方法同时执行

    通过委托名.BeginInvoke(传入方法的参数)

1.1 回调函数:执行完线程后,重新开启一个线程

    绑定方法

    BeginInvoke(传入方法的参数,回调一个委托类型的函数,参数)

         函数:回调函数,线程结束之后回调用此方法

         参数:回调函数的参数

     

IAsyncResult可以获取当前线程状态,获取状态可以用IsCompleted方法检测当前线程是否结束

EndInvoke()获取线程的结果,括号里需要线程状态类型的参数

AsyncWaitHandle.WaitOne()该方法用于等待一段时间,判断线程是否结束

2.通过Thread类开启线程

   1.创建对象,构造函数参数为开启线程所需要的方法,这个线程没有启动

   2.启动线程 start()方法

2.1有参数传递

      法一:启动方法里加参数  start(数据)

      法二:使用类,声明对象时传递数据;通过Thread声明对象时,传入对象的方法)

2.2Thread类可以设置为后台线程,方法为IsBackGround

2.3Thread类可以挂起,方法为Therad.sleep()

2.4Thread类可以终止当前线程,方法为Abort()

2.5Thread类可以结束挂起,方法为Join()

线程的优先级:Priorty

 控制线程

 3.线程池:

1.线程池是一个后台线程,如果进程的所有前台进程结束了,所有的后台进程就会停止

2.不能把入池的线程改为前台线程

3.不能给入池的线程设置优先级

4.入池的线程只能处理时间短的任务

4.任务线程

Task类,线程要执行的方法放在声明里

 TaskFactory,线程需要执行的方法放在启动方法里

对象.ContinueWith(方法),用于执行完某个线程之后执行另一个方法,用Task类型的对象接收  Task.CurrentId 线程ID

对象.ID   实例ID,(调用该方法的线程名)

任务线程名.status获取当前线程状态

当多个线程访问一个变量时,会出现冲突,该情况可以使用lock(参数){方法}锁定,锁定后在同一时刻只能有一个线程调用此方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值