控制线程

Java的线程支持提供了一些便捷的工具方法,经过这些便捷的工具方法能够很好地控制线程的执行。并发

  • join线程

Thread提供了让一个线程等待另外一个线程完成的方法---join()方法。当在某个程序执行流中调用其余线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。工具

join()方法一般由使用线程的程序调用,以将大问题划分红许多小问题,每一个小问题分配一个线程。当全部的小问题都获得处理后,再调用主线程来进一步操做。spa

  • 后台线程

有一种线程是在后台运行的,它的任务是为其余的线程提供服务,这种线程被称为“后台线程(Daemon Thread)”。JVM的垃圾回收线程就是的典型的后台线程。线程

后台线程有个特征:若是全部的前台线程都死亡,后台线程会自动死亡。对象

调用Thread对象的setDaemon(true)方法可将指定线程设置成后台线程。isDaemon()方法用于判断指定线程是否为后台线程。it

主线程默认是前台线程。前台线程建立的子线程默认是前台线程,后台线程建立的子线程默认是后台线程。io

  • 线程睡眠Thread.sleep

若是须要让当前正在执行的线程暂停一段时间,并进入阻塞态,能够经过调用Thread类的静态方法sleep()来实现。后台

当前线程调用sleep()方法进入阻塞态后,在其睡眠时间段内,该线程不会得到执行的机会,即便系统中没有其余可执行的线程,处于sleep中的线程也不会执行,所以sleep()方法经常使用来暂停程序的执行。垃圾回收

  • 线程让步Thread.yield

yield()方法也是Thread类提供的一个静态方法,它也可让当前线程暂停,但它不会阻塞该线程,它只是将该线程转入就绪态。yield()方法只是让当前线程暂停一下,让系统的线程调度器从新调度一次。彻底可能的状况是:当某个线程调用了yield()方法暂停以后,线程调度器又将其调度出来从新执行。yield

实际上,当某个线程调用了yield()方法暂停以后,只有优先级与当前线程相同,或者优先级比当前线程更高的处于就绪态的线程才会得到执行的机会。

一般不建议使用yield()方法来控制并发线程的执行。

  • 改变线程优先级

每一个线程执行时都具备必定的优先级,优先级高的线程得到较多的执行机会,而优先级低的线程则得到较少的执行机会。

每一个线程默认的优先级都与建立它的父线程的优先级相同,在默认状况下,main线程具备普通优先级。

Thread类提供了setPriority(int priority)实例方法来设置线程的优先级。

相关文章
相关标签/搜索