Я изучал метод Thread join(), и я наткнулся на ThreadJoinMethod сообщение на stackoverflow. Я изменил код для разработки рабочего примера, и я запутался в выходе . Фрагмент кода.Thread join() method output confusion
class JoinRunnable implements Runnable{
public void run() {
for(int i =0 ; i < 4 ; i++){
System.out.println(i);
}
}
}
public class TestJoin{
public static void main(String[] args) throws InterruptedException {
JoinRunnable joinRunnable = new JoinRunnable();
Thread t1 = new Thread(joinRunnable);
Thread t2 = new Thread(joinRunnable);
t1.start();
t2.start();
System.out.println("Currently running thread: " + Thread.currentThread().getName());
t1.join();
t2.join();
System.out.println("I must wait");
}
}
Выход следующей программы: -
0
1
2
3
0
1
2
3
Currently running thread: main
I must wait
Я смущен на выходе. Текущая нить будет соединена после вызова join
по t1 и t2, но почему заявление, "Currently Running Thread: main"
печатает после того, как t1 и t2 завершает? У меня отсутствует какая-то важная концепция здесь? Поскольку main() присоединяется к t1 и t2 после операторов объединения не раньше. Может ли кто-нибудь это уточнить?
Возможно ли, что два других потока просто закончат свои процедуры перед вызовами в различные библиотеки, задействованные в 'Thread',' System', 'out' и т. Д., Дает результат? Протестируйте, сделав вывод от 1 до 10000 для каждого из них. Затем получите удовольствие от просеивания. – christopher
Добавьте спать в итерацию цикла, и вы увидите, что вы не получите тот же результат. –
отлично, я просто добавил спать сейчас. В настоящий момент напечатан текущий метод-main. Поэтому выход должен отличаться. Благодаря тонну. – benz