java中线程的控制

线程的控制:工具

Java中的线程支持提供了一些便捷的工具方法,经过这些便捷的工做方法能够更好的控制线程的执行。spa

1、join线程:线程

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

 

Join()方法有以下3种重载形式:blog

一、join():等待被join的线程执行完成。get

二、join(long millis):等待被join的线程的时间最长为millis 毫秒,若是在millis 毫秒内被join 的线程尚未执行结束,则再也不等待。io

三、Joinlong 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方法只是让当前的线程暂停一下,让系统的线程调度器从新调度一次。

 

 

 

总结一下yieldsleep方法的区别:

一、Sleep方法暂停但前线程后,会给其余线程执行机会,不会理会其余线程的优先级;但yield方法只会给优先级相同,或优先级更高的线程执行机会。

二、Sleep方法会将线程进入阻塞状态,知道通过阻塞时间才会转入就绪状态;而yield方法不会将线程转入阻塞状态,他只是强制当前线程进入就绪状态。

三、Sleep方法会抛出异常,而yield方法不会抛出异常。

相关文章
相关标签/搜索