• 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方法不会抛出异常。

  • 相关阅读:
    Bzoj 2134: [国家集训队2011]单选错位(期望)
    洛谷 P1230 智力大冲浪
    洛谷 P2695 骑士的工作
    洛谷 P1551 亲戚
    洛谷 P1111 修复公路
    洛谷 P1599 结算日
    HDU 1166 敌兵布阵
    洛谷 P2212 [USACO14MAR]浇地Watering the Fields
    洛谷 P1506 拯救oibh总部
    洛谷 P1396 营救
  • 原文地址:https://www.cnblogs.com/teng-IT/p/4445175.html
Copyright © 2020-2023  润新知