读书笔记:java多线程之控制线程

阅读的书籍:《疯狂java讲义》

关键词:join(),sleep(),yield(),后台线程,线程优先级,sleep()和yield()的区别

join():阻塞了调用这个方法的线程,直到被join的线程执行完为止

举个例子: 

在这里main线程调用了 jt 线程的join()方法,那么main线程就必须等 jt 执行结束之后才能继续向下执行

sleep():让当前正在执行的线程暂停一段时间,并进入阻塞状态 

在睡眠时间段内,该线程不会获得执行的机会,即使系统中已经没有其他可执行的线程,sleep()常用来暂停程序的执行

yield():让当前正在执行的线程暂停,但不会阻塞该线程,而是将线程转入就绪状态

当某个线程调用了yield()方法之后,只有优先级与当前线程相同,或者优先级比当前线程更高的处于就绪状态的线程才会获得执行的机会

后台线程:在后台运行,为其他线程提供服务的线程,如JVM的垃圾回收线程

如果所有的前台线程都死亡了,那么后台线程也会自动死亡,Thread的setDaemon()方法可以设置后台线程,要在start()方法之前调用

并不是所有的线程都默认是前台线程,前台线程创建的子线程默认是前台线程,后台线程创建的子线程默认就是后台线程

线程的优先级:优先级高的线程会获得较多的执行机会

每个线程默认的优先级都与创建它的父线程相同,默认情况下,main线程具有普通优先级

Thread类中的三个优先级静态常量:

通过setPriority()方法可以改变线程的优先级

sleep()和yield()的区别

  • sleep()方法暂停当前线程后,会给其他线程执行的机会,不考虑线程的优先级;yield()方法只会给优先级相同,或更高的线程执行的机会
  • sleep()方法会将线程转如阻塞状态,直到经过阻塞时间后才会转到就绪状态;yield()则是直接强制当前线程进入就绪状态
  • sleep()方法声明抛出了InterruptedException异常,所以调用时需要捕获或者抛出该异常;yield()方法则没有声明抛出任何异常
  • sleep()方法比yield()方法有更好的可移植性,通常不建议使用yield()方法来控制并发线程的执行

 

 

©️2020 CSDN 皮肤主题: 技术工厂 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值