2015-01-20 3 views
1

Я пытаюсь понять некоторые основные вещи на Java и нужна помощь в отношении Threads.Уточнение в отношении потоков в Java

Сегодня я наткнулся на кусок кода, в котором новые потоки создавались в течение цикла следующим образом:

public class TestThreads { 
public static void main(String args[]) 
{ 
    Thread t1=new Thread(); 
    System.out.println("***************"+t1.getId()); 
    for(int i=0;i<5;i++) 
    { 
     Thread t2= new Thread(); 
     System.out.println("++++++++++++++++"+t2.getId()); 
     System.out.println("++++++++++++++++"+t2.getName()); 
    } 
} 

} 

Я предполагал, что t2.getId() и t2.getName() напечатает одинаковые значения, поскольку на каждой итерации цикла новый поток назначается одному объекту потока объектов T2.

Однако для каждой итерации было напечатано другое значение для getId и getName.

Может кто-нибудь объяснить, как это возможно, не назначаем новый поток тому же объекту.

В этом случае, если в первой итерации были созданы локальные переменные потока, то на второй итерации их значения будут переопределены.

Это может показаться глупым вопросом, но, пожалуйста, помогите мне.

ответ

6

Вы вводите в заблуждение объект с контрольная переменная.

Я предполагал, что t2.getId() и t2.getName() будет печатать то же значение, так как в каждой итерации цикла, то новый поток назначаются на же объект объекта резьбы T2.

Нет, новая тема объект в настоящее время назначен на же ссылочной, Название переменной t2.

переменная, здесь t2, относится к любому объекту присваивается ему, и имя переменной не имеет смысла в этом контексте, а ссылка на объект это то, что действительно вопросы. Так как вы меняете ссылку в цикле for, то «имя» объекта (если оно имеет поле ) также изменится.

Я чувствую, что полное понимание этого ключевого различия, которое действительно доходит до ядра программирования OOPS Java, является одним из тех основных шагов, которые когда-то были достигнуты, помогут программисту значительно.

+0

Большое спасибо за разъяснение. Это отвечает моему вопросу – RookieHere

Смежные вопросы