2016-12-17 2 views
-2

Я пытаюсь узнать о потоках, и это заставило меня задуматься. Пожалуйста Тэ посмотрите на следующее -Какой поток вызывает строку?

public static void main(String [] args) { // line 1 
    Thread exampleThread = new Thread() { // line 2 
     public void run() {     // line 3 
     //some code      // line 4 
     ...........      // line 5 
     ...........      // line 6 
     }         // line 7 
    };          // line 8 
              // line 9 
    // Which thread invokes this line?  // line 10 
    exampleThread.start();     // line 11 
              // line 12 
    // Which thread invokes this line?  // line 13 
    exampleThread.join();     // line 14 
}           // line 15 

Я думаю основной поток вызывает линию 11.

Но как насчет Строка 14? Какой поток вызывает это? Главная или exampleThread? Не могли бы вы объяснить?

+0

Оба являются тем же «вызывающим» потоком. Вызывающий поток запускает exampleThread и, вызывая соединение, будет ждать его завершения - вы блокируете вызывающий поток, пока exampleThread не завершится. Вы можете распечатать системное время перед тем, как начать поток, а затем в вашем примере. Слишком сложная логика в течение 2 секунд, а затем в конце распечатать тайм-аут снова, вы должны увидеть, что вызывающий поток заблокирован на 2 секунды, вместо того, чтобы немедленно возвращаться назывался. –

ответ

1

exampleThread.join() также вызывается основной темой.

Что он делает, это заблокировать вызывающую нить (главный поток здесь), пока не завершится другой поток (exampleThread).

В общем, последовательность инструкций всегда выполняется одной и той же нитью. Нет никакого способа, чтобы другой поток мог перескочить и взять на себя (но возможно, что несколько потоков выполняют одну и ту же последовательность команд одновременно, даже в одном экземпляре объекта).

Смежные вопросы