Определите, что делает данный код:
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(), то вывод мог бы быть в неопределенном порядке, так как потоки выполняются параллельно.