2a9cfd0b

Реализация интерфейса Runnable


Описанный выше способ создания задач как объектов класса Thread или унаследованных от него классов кажется достаточнао естественным. Однако этот способ не единственный. Если вам нужно создать только одну задачу, работающую одновременно с кодом аплета, проще выбрать второй способ с использованием интерфейса Runnable.

Идея заключается в том, что основной класс аплета, который является дочерним по отношению к классу Applet, дополнительно реализует интерфейс Runnable, как это показано ниже:

public class MultiTask extends Applet implements Runnable

{

  Thread m_MultiTask = null;

  . . .

  public void run()

  {

    . . .

  }

  public void start()

  {

    if (m_MultiTask == null)

    {

      m_MultiTask = new Thread(this);

      m_MultiTask.start();

    }

  }

  public void stop()



  {

    if (m_MultiTask != null)

    {

      m_MultiTask.stop();

      m_MultiTask = null;

    }

  }

}

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

Для создания задачи используется оператор new. Задача создается как объект класса Thread, причем конструктору передается ссылка на класс аплета:

m_MultiTask = new Thread(this);

При этом при запуске задачи управление получит метод run, определенный в классе аплета.

Как запустить задачу?

Запуск выполняется, как и раньше, методом start. Обычно задача запускается из метода start аплета, когда пользователь отображает страницу сервера Web, содержащую аплет. Остановка задачи выполняется методом stop.



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