public class Clock extends Thread {
public static void main(String[] args) throws InterruptedException {
Clock clock = new Clock();
clock.start();
Thread.sleep(10000);
clock.interrupt();
}
public void run() {
Thread current = Thread.currentThread();
while (!current.isInterrupted())
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println("Работа потока была прервана");
break;
}
System.out.println("Tik");
}
}
}
Владислав Шешко
25 уровень
Thread current = Thread.currentThread(); что означает данная строка? это код из доп лекции по многопоточности)
Обсуждается
Комментарии (7)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
VIKTOR NEZHELSKIYExpert
15 апреля 2019, 09:45
current - объект класса Thread который получает ссылку на текущий объект того же класса методом currentThread().
Класс Clock наследник класса Thread. Класс Clock реализует метод run() в котором прежде всего получает в локальную переменную current конкретный экземпляр объекта для дальнейших действий.
+1
Антон Азаренко
15 апреля 2019, 20:01
не путайте понятия объект и ссылка на объект. current это ссылка на объект Thread который мы получим из СТАТИЧЕСКОГО метода - currentThread() КЛАССА Thread.
+4
VIKTOR NEZHELSKIYExpert
15 апреля 2019, 20:31
Если быть точным, то current - это переменная метода run(), которая инициализируется значением Thread.currentThread(); после чего с ней можно работать как с объектом класса Thread. С любым объектом можно работать только если на него существует ссылка, хранящаяся в именованной области памяти. Если область памяти не имеет на неё ссылки, то область памяти считается мусором и автоматически освобождается. Следовательно ссылка на объект по сути и есть этот объект. Нет ссылки - нет объекта. Однако, может быть более одной ссылки на один объект, как у одного человека может быть более одного имени. Можно говорить, что Иван - это имя человека, но нельзя говорить, что Иван - это не человек. Аналогично, можно говорить что current - это ссылка на объект, но нельзя говорить что в данном случае current - это не объект. current не был объектом до тех пор, пока эту переменную не инициализировали значением Thread.currentThread(). Разве не так?
+1
Антон Азаренко
16 апреля 2019, 09:45
Опять вы ошибаетесь. Да current переменная типа Thread которая является ссылкой. Да она инициализируется тем что нам вернет метод currentThread().Раз вы заговорили о пямяти объясню, Объекты в джава храняться в куче(HEAP), ссылки на них храняться в стеке(STACK). Если написать вот так Thread current; Jvm создаст ссылку current в стеке но самого объекта не будет существовать пока он не будет инициализирован. Сама ссылка быдет существовать пока не завершиться метод run. И нельзя говорить что current - это обьект, так как таковым не является.
+15
VIKTOR NEZHELSKIYExpert
16 апреля 2019, 09:52
Всё понятно, согласен. Жаль только, что автор вопроса никак не отозвался по поводу наших разъяснений.
+3
Владислав Шешко
16 апреля 2019, 12:44
Спасибо за помощь,буду дальше познавать нити, пока сложновато идут
0
Илья Джерихов
16 июня 2020, 10:52
То есть в данной ситуации currentThread() ссылается на объект new Clock(), созданный в main?
+1