новый оператор в Java

1

При создании экземпляра Thread для создания объекта потока путем реализации интерфейса Runnable мы делаем что-то вроде

public class HelloRunnable implements Runnable {

    public void run() {
        System.out.println("Hello from a thread!");
    }

    public static void main(String args[]) {
        (new Thread(new HelloRunnable())).start();
    }

}

Ссылка: Учебник

Вопрос касается линии в методе main(). Я понимаю, что start() - это метод экземпляра класса Thread, и именно поэтому мы используем (вновь созданный объект класса Thread with) точечной нотации.

Теперь я new Thread(new HelloRunnable()) вопросом о создании этого объекта Thread (созданного new Thread(new HelloRunnable())). Почему мы передаем объект HelloRunnable (т.е. Класс, реализующий run() интерфейса Runnable) для конструктора, если Thread. Для чего нужен конструктор Thread() для объекта HelloRunnable? Каким будет использование конструктора Thread() для объекта HelloRunnable?

В общем случае задача конструктора Thread() заключается в создании объекта Thread. Итак, где конструктор Thread() использует объект класса, реализующего run(), создавая объект класса Thread.

Заранее спасибо.

Теги:
object
multithreading
oop

2 ответа

0
Лучший ответ

Чтобы узнать, что делает конструктор в Java API, прочитайте javadoc (в любой хорошей среде IDE вы можете просто навести указатель мыши на новое выражение создания экземпляра класса, чтобы увидеть всплывающую подсказку с javadoc). Для конструктора Thread, использующего Runnable, он говорит:

Выделяет новый объект Thread. Этот конструктор имеет тот же эффект, что и Thread (null, target, gname), где gname - новое сгенерированное имя. Автоматически сгенерированные имена имеют форму "Thread-" +n, где n - целое число.

Параметры:

  • target - объект, метод запуска которого вызывается при запуске этого потока. Если значение null, этот метод запуска классов ничего не делает.

Таким образом, объект Runnable предоставляет метод запуска для вызова. Если вы не передадите такой объект, нить не будет знать, какой класс содержит метод run (не говоря уже о том, как инициализировать этот объект).

  • 0
    Я на самом деле хочу спросить, что задача конструктора не в том, чтобы классу было что запускать. Его задача - присвоить некоторые значения (передаваемые ему в вызове конструктора) полям вновь созданного / создаваемого объекта. Не так ли?
2

"Объект реализации реализации класса" необходим, чтобы что-то было выполнено.

В противном случае какой код будет работать в потоке?

Вам не нужен только объект Runnable - альтернатива заключается в том, чтобы расширить Thread и переопределить метод Thread run.

  • 0
    Я на самом деле хочу спросить, что задача конструктора не в том, чтобы классу было что запускать. Его задача - присвоить некоторые значения (передаваемые ему в вызове конструктора) полям вновь созданного / создаваемого объекта. Не так ли?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню