#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’ является приоритетом Потока.