Java - new NewThread()

335
12 ноября 2018, 00:20

В одной из книг даются примеры и мне не совсем понятно использование кодового слова "new".

Пример 1:

// Create a second thread.
class NewThread implements Runnable {
  Thread t;
  NewThread() {
    // Create a new, second thread
    t = new Thread(this, "Demo Thread");
    System.out.println("Child thread: " + t);
    t.start(); // Start the thread
  }
  // This is the entry point for the second thread.
  public void run() {
    try {
      for(int i = 5; i > 0; i--) {
        System.out.println("Child Thread: " + i);
        Thread.sleep(500);
      }
    } catch (InterruptedException e) {
      System.out.println("Child interrupted.");
    }
    System.out.println("Exiting child thread.");
  }
}
class ThreadDemo {
  public static void main(String args[]) {
    new NewThread(); // create a new thread
    try {
      for(int i = 5; i > 0; i--) {
        System.out.println("Main Thread: " + i);
        Thread.sleep(1000);
      }
    } catch (InterruptedException e) {
      System.out.println("Main thread interrupted.");
    }
    System.out.println("Main thread exiting.");
  }
}

Пример 2

// Create a second thread by extending Thread
class NewThread extends Thread {
  NewThread() {
    // Create a new, second thread
    super("Demo Thread");
    System.out.println("Child thread: " + this);
    start(); // Start the thread
  }
  // This is the entry point for the second thread.
  public void run() {
    try {
      for(int i = 5; i > 0; i--) {
        System.out.println("Child Thread: " + i);
        Thread.sleep(500);
      }
    } catch (InterruptedException e) {
      System.out.println("Child interrupted.");
    }
    System.out.println("Exiting child thread.");
  }
}
class ExtendThread {
  public static void main(String args[]) {
    new NewThread(); // create a new thread
    try {
      for(int i = 5; i > 0; i--) {
        System.out.println("Main Thread: " + i);
        Thread.sleep(1000);
      }
    } catch (InterruptedException e) {
      System.out.println("Main thread interrupted.");
    }
    System.out.println("Main thread exiting.");
  }
}

В методе main вызывается оператор "new NewThread()". Почему предварительно не создается ссылочная переменная, а ей уже не присваивается ссылка на объект создаваемый оператором new?

Просто до этого встречал такие примеры "Test t1 = new Test();".

Answer 1

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

 Thread t = new NewThread();
 t.start();

и убрать вызов start() из конструктора.

Answer 2

В этих примерах просто необходимо создать и запустить поток. Больше к нему не требуется доступ. Если бы мы потом захотели проверить состояние потока или получить его имя, то мы бы создали переменную и через нее проводили бы все операции. А так нам надо создать и запустить. Создаем с помощью new, а запускается поток прямо в конструкторе.

READ ALSO
Android Выполнять Действие Каждый день

Android Выполнять Действие Каждый день

Всем приветЕсть приложения

163
Исправить коды \u в html-файлах (javadoc из NetBeans)

Исправить коды \u в html-файлах (javadoc из NetBeans)

Покопавшись в интернете нашёл причину кодов \u**** в html-файлах, получающихся при создании документации html из javadoc-комментариев, записанных в исходном...

226
Запрос permission на отправку Push Notification

Запрос permission на отправку Push Notification

Могу ли я запрашивать permission на отправку Push Notification по аналогии с локацией или доступом к памяти?

232