java中线程的控制

线程的控制:

Java中的线程支持提供了一些便捷的工具方法,通过这些便捷的工作方法可以更好的控制线程的执行。

一、join线程:

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

 

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

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

2、join(long millis):等待被join的线程的时间最长为millis 毫秒,如果在millis 毫秒内被join 的线程还没有执行结束,则不再等待。

3、Joinlong millis , int nanos:等待被join的线程的时间最长为millis 毫秒加nanos 毫微秒。

 

 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 } 

 

 

 

 

二、interrupt方法中断线程:

 stop()方法也是中断线程的方法,但是已经弃用了。

 interrupt方法可以用来请求终止线程。

 当对一个线程调用interrupt方法时,线程的中断状态将被置位。这时每个线程都具有的boolean 标志,每个线程都应该不时地检查这个标志,以判断线程是否被终端。

被中断的程序可以决定如何响应中断。

 

三、线程睡眠:sleep

如果需要让当前正在执行的线程暂停一段时间,并进入阻塞状态,则可以通过调用Thread类的静态sleep()方法来实现。

当当前线程调用sleep()方法进入阻塞状态后,在其睡眠时间段内,该线程不会获得执行的机会,即使系统中没有其他可执行的线程,处于sleep中的线程也不会执行,因此sleep方法常用来暂停程序的执行。

 

四、线程的让步:yield

yield方法是一个和sleep方法有点相似的方法,它也是Thread类提供的一个静态方法,它也可以让当前正在执行的线程暂停,但它不会阻塞该线程,他只是让该线程转入就绪状态。Yield方法只是让当前的线程暂停一下,让系统的线程调度器重新调度一次。

 

 

 

总结一下yieldsleep方法的区别:

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

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

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

转载于:https://www.cnblogs.com/teng-IT/p/4445175.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值