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