Концепция потоковой обработки Java: объяснение вывода

#java #multithreading

#java #многопоточность

Вопрос:

Кто-нибудь может сказать мне, почему в следующей строке отображается 5 при запуске программы

 CURRENT THREAD IS: Thread[main,5,main]
  

Программа взята из книги «Полный справочник по Java», и вот программа:

 public class CurrentThreadDemo 
{
public static void main(String args[])
{
Thread t = Thread.currentThread();
System.out.println("CURRENT THREAD IS: "   t);
t.setName("ChangedThreadName");
System.out.println("CHANGED THREAD NAME IS: "   t);

try
{
for(int n = 8; n > 0; n--)
System.out.println(n);
Thread.sleep(1000);
}

catch(InterruptedException e)
{
System.out.println("Main Thread Interrupted "   e);
}
}
}
  

Результатом для следующей программы является:

 CURRENT THREAD IS: Thread[main,5,main]
CHANGED THREAD NAME IS: Thread[ChangedThreadName,5,main]
8
7
6
5
4
3
2
1
  

Ответ №1:

Вы неявно вызываете Thread.toString() . Javadoc для метода указывает, что он

возвращает строковое представление этого потока, включая имя потока, приоритет и группу потоков.

Просмотр исходного кода подтверждает это:

     return "Thread["   getName()   ","   getPriority()   ","   
               group.getName()   "]";
  

Подводя итог, второй элемент — это приоритет потока.

В моем JDK (и, вероятно, в вашем), 5 это значение Thread.NORM_PRIORITY .

Ответ №2:

Посмотрите Thread#toString() , это приоритет потока.

Ответ №3:

Я думаю, что число 5 является приоритетом потока вашей программы; это не имеет ничего общего с числами в вашем цикле.

Ответ №4:

Вот код Thread.toString:

  public String toString() {
    ThreadGroup group = getThreadGroup();
if (group != null) {
    return "Thread["   getName()   ","   getPriority()   ","   
               group.getName()   "]";
} else {
    return "Thread["   getName()   ","   getPriority()   ","   
                ""   "]";
}
}
  

Как вы можете видеть, ‘5’ является приоритетом Потока.