Определите, что делает данный код: 
 classTestextends Thread { 
 String stri 
 public Test(String str) { 
 this.str = str; 
 @Override 
 public void run() { 
 System.out.print(str): 
 public static void main(stringül args) { 
 Test t1 = new Test("Thread1"); 
 Test t2 = new Test("Thread2"); 
 Test t3 = new Test("Thread3"); 
 t1.start): 
 t3.run(): // 1| 
 
 • Выведет в консоль по порядку Thread1, Thread2, Thread3 
 • Выведет в консоль Thread1, Thread2, Thread3 в неопределенном порядке 
 • Код не компилируется на строке 1 
 • Выведет в консоль Thread1, Thread3 в неопределенном порядке
Другие предметы Университет Многопоточность в Java Java программирование многопоточность классы потоки консольный вывод университет код ошибки компиляции порядок выполнения
Давайте разберем данный код и выясним, что он делает. Для начала, исправим некоторые синтаксические ошибки, которые присутствуют в вашем коде:
Вот исправленный вариант кода:
class Test extends Thread {
    String str;
    public Test(String str) {
        this.str = str;
    }
    @Override
    public void run() {
        System.out.print(str);
    }
    public static void main(String[] args) {
        Test t1 = new Test("Thread1");
        Test t2 = new Test("Thread2");
        Test t3 = new Test("Thread3");
        t1.start();
        t3.run(); // 1|
    }
}
Теперь давайте проанализируем, что происходит в этом коде:
Таким образом, вывод программы будет "Thread1Thread3". Порядок вывода будет определен тем, что t1.start() запускает новый поток, а t3.run() выполняется в текущем потоке, но поскольку t1 и t3 выполняются последовательно, то порядок вывода будет именно таким.
Ответ на ваш вопрос:
Однако, если бы вы использовали t2.start(), то вывод мог бы быть в неопределенном порядке, так как потоки выполняются параллельно.