Запуск этого кода дает следующий результат:
Name of t1:Thread-0
Name of t2:Thread-1
id of t1:8
running...
After changing name of t1:Sonoo Jaiswal
running...
Должна ли последняя строка "running..." не печататься сразу после первой строки "running..."? Вот code--
class TestJoinMethod3 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestJoinMethod3 t1=new TestJoinMethod3();
TestJoinMethod3 t2=new TestJoinMethod3();
System.out.println("Name of t1:"+t1.getName());
System.out.println("Name of t2:"+t2.getName());
System.out.println("id of t1:"+t1.getId());
t1.start();
t2.start();
t1.setName("Sonoo Jaiswal");
System.out.println("After changing name of t1:"+t1.getName());
}
}
Там нет никакого контроля.
Это так просто. Темы, в первую очередь, независимы друг от друга. Поэтому точный порядок, в котором происходят события, не может быть предсказан.
Если вам нужно контролировать способы продвижения ваших потоков, вам нужно изучить способы их совершения (которые могут быть "произошли до" или, например, точки синхронизации).
Должна ли последняя строка "running..." не печататься сразу после первой строки "running..."? Вот code--
Не обязательно. Нити работают независимо в фоновом режиме, и очень сложно предсказать, когда они будут работать, и время между ними. Если вы запускаете свою программу несколько раз, вы должны увидеть разные версии вывода.
Вся суть потоков - это асинхронная операция. Если поток блокируется на некотором IO, тогда другие потоки могут работать в фоновой обработке другой информации. Это сила многопоточных программ. Если вы хотите контролировать их, чтобы они выплевывали сообщения в некотором порядке, вы могли бы просто запускать вещи в одном потоке.