线程的控制:工具
Java中的线程支持提供了一些便捷的工具方法,经过这些便捷的工做方法能够更好的控制线程的执行。spa
1、join线程:线程
Thread提供了让一个线程等待另外一个线程完成的方法——join()方法。当某个程序执行流中调用其余线程的join方法时,调用线程将被阻塞,直到被join方法加入的join线程执行完为止。code
Join()方法有以下3种重载形式:blog
一、join():等待被join的线程执行完成。get
二、join(long millis):等待被join的线程的时间最长为millis 毫秒,若是在millis 毫秒内被join 的线程尚未执行结束,则再也不等待。io
三、Join(long millis , int nanos):等待被join的线程的时间最长为millis 毫秒加nanos 毫微秒。class
1 public class JoinThread extends Thread{ 2 private int i; 3 public void run(){ 4 for(;i<30;i++){ 5 try{sleep(1000); 6 System.out.println("线程的名字:"+getName()+" "+i);}catch(Exception e){ 7 System.out.println(e); 8 } 9 } 10 } 11 public static void main(String[] args){ 12 JoinThread j=new JoinThread(); 13 for(int k=0;k<100;k++){ 14 try{ 15 Thread.sleep(1000); 16 System.out.println("当前线程的名字为:"+Thread.currentThread().getName()+" "+k); 17 }catch(Exception e){ 18 System.out.println(e); 19 } 20 if(k==5){ 21 j.start(); 22 } 23 if(k==10){ 24 try{j.join();}catch(Exception e){ 25 System.out.println(e); 26 } 27 } 28 } 29 } 30 }
2、interrupt方法中断线程:终端
stop()方法也是中断线程的方法,可是已经弃用了。yield
interrupt方法能够用来请求终止线程。
当对一个线程调用interrupt方法时,线程的中断状态将被置位。这时每一个线程都具备的boolean 标志,每一个线程都应该不时地检查这个标志,以判断线程是否被终端。
被中断的程序能够决定如何响应中断。
3、线程睡眠:sleep
若是须要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则能够经过调用Thread类的静态sleep()方法来实现。
当当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间段内,该线程不会得到执行的机会,即便系统中没有其余可执行的线程,处于sleep中的线程也不会执行,所以sleep方法经常使用来暂停程序的执行。
4、线程的让步:yield
yield方法是一个和sleep方法有点类似的方法,它也是Thread类提供的一个静态方法,它也可让当前正在执行的线程暂停,但它不会阻塞该线程,他只是让该线程转入就绪状态。Yield方法只是让当前的线程暂停一下,让系统的线程调度器从新调度一次。
总结一下yield和sleep方法的区别:
一、Sleep方法暂停但前线程后,会给其余线程执行机会,不会理会其余线程的优先级;但yield方法只会给优先级相同,或优先级更高的线程执行机会。
二、Sleep方法会将线程进入阻塞状态,知道通过阻塞时间才会转入就绪状态;而yield方法不会将线程转入阻塞状态,他只是强制当前线程进入就绪状态。
三、Sleep方法会抛出异常,而yield方法不会抛出异常。