recherche

Maison  >  Questions et réponses  >  le corps du texte

java - 对main线程使用join方法,为什么main线程处于一直阻塞状态?

public class JoinTest {

public static void main(String[] args) throws InterruptedException {
    MyThread3 thread=new MyThread3();
    thread.start();
    //thread.join(1);//将主线程加入到子线程后面,不过如果子线程在1毫秒时间内没执行完,则主线程便不再等待它执行完,进入就绪状态,等待cpu调度
    System.out.println(Thread.currentThread());
    Thread.currentThread().join();
    for(int i=0;i<30;i++){
        System.out.println(Thread.currentThread().getName() + "线程第" + i + "次执行!");
    }
}

}

class MyThread3 extends Thread {

@Override
public void run() {
    
    for (int i = 0; i < 1000; i++) {
        try {
            System.out.println(this.getName() + "线程第" + i + "次执行!");
            Thread.sleep(1);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

}

高洛峰高洛峰2888 Il y a quelques jours431

répondre à tous(1)je répondrai

  • PHP中文网

    PHP中文网2017-04-17 18:00:52

    Ensuite, vous devez d'abord savoir à quoi sert la fonction join ! Jetons d'abord un coup d'œil à la documentation :

    /**
     * Waits for this thread to die.
     *
     * <p> An invocation of this method behaves in exactly the same
     * way as the invocation
     *
     * <blockquote>
     * {@linkplain #join(long) join}{@code (0)}
     * </blockquote>
     *
     * @throws  InterruptedException
     *          if any thread has interrupted the current thread. The
     *          <i>interrupted status</i> of the current thread is
     *          cleared when this exception is thrown.
     */

    Comme le dit la première phrase Waits for this thread to die, si vous exécutez "Je dois attendre la fin du thread principal avant la fin du thread actuel" sur le thread principal, n'est-ce pas une boucle infinie ?

    répondre
    0
  • Annulerrépondre