Microsoft Visual J++. Создание приложений и аплетов на языке Java

Создание дочернего класса на базе класса Thread


Рассмотрим первый способ реализации мультизадачности, основанный на наследовании от класса Thread. При использовании этого способа вы определяете для задачи отдельный класс, например, так:

class DrawRectangles extends Thread

{

  . . .

  public void run()

  {

    . . .

  }

}

Здесь определен класс DrawRectangles, который является дочерним по отношению к классу Thread.

Обратите внимание на метод run. Создавая свой класс на базе класса Thread, вы должны всегда определять этот метод, который и будет выполняться в рамках отдельной задачи.

Заметим, что метод run не вызывается напрямую никакими другими методами. Он получает управление при запуске задачи методом start.

Как это происходит?



Рассмотрим процедуру запуска задачи на примере класса DrawRectangles.

Вначале ваше приложение должно создать объект класса Thread:

public class MultiTask2 extends Applet

{

  Thread m_DrawRectThread = null;

  . . .

  public void start()

  {

    if (m_DrawRectThread == null)

    {

      m_DrawRectThread = new DrawRectangles(this);

      m_DrawRectThread.start();

    }

  }

}

Создание объекта выполняется оператором new в методе start, который получает управление, когда пользователь открывает документ HTML с аплетом. Сразу после создания задача запускается на выполнение, для чего вызывается метод start.

Что касается метода run, то если задача используется для выполнения какой либо периодической работы, то этот метод содержит внутри себя бесконечный цикл. Когда этот цикл завершается и метод run возвращает управление, задача прекращает свою работу нормальным, не аварийным образом. Для аварийного завершения задачи можно использовать метод interrupt.

Остановка работающей задачи выполняется методом stop. Обычно остановка всех работающих задач, созданных аплетом, выполняется методом stop класса аплета:

public void stop()

{

  if (m_DrawRectThread != null)

  {

    m_DrawRectThread.stop();

    m_DrawRectThread = null;

  }

}

Напомним, что этот метод вызывается, когда пользователь покидает страницу сервера Web, содержащую аплет.



Содержание раздела