263a41cd

Интерфейс Runnable


Самый простой способ сделать аплет Java многопоточным - реализовать в нем интерфейс Runnable, как это показано ниже:

public class MultiThreadApp extends Applet implements Runnable { private Thread m_MyThread = null; . . . public void start() { if (m_MyThread == null) { m_MyThread = new Thread(this); m_MyThread.start(); } } public void run() { . . . } }

Здесь класс MultiThreadApp наследует класс Applet (так как мы создаем аплет) и дополнительно реализует интерфейс Runnable. Так как в Java нет множественного наследования, мы не можем создать класс на базе классов Applet и Thread, однако можно реализовать произвольное количество интерфейсов, чем мы и воспользовались.

В приведенном фрагменте исходного текста поток создается в методе start, однако можно делать это и в других методах. Для создания потока мы использовали один из конструкторов класса Thread, передавая ему в качестве параметра ссылку на аплет.

Ниже приведены прототипы конструкторов, с помощью которых можно создавать новые потоки:

  • создание нового объекта Thread
  • public Thread();

  • создание нового потока с указанием объекта, для которого будет вызван метод run
  • public Thread(Runnable target);

  • аналогично предыдущему, но дополнительно задается имя нового потока
  • public Thread(Runnable target, String name);

  • создание потока с указанием его имени
  • public Thread(String name);

  • создание нового потока с указанием группы и объекта, для которого вызывается метод run
  • public Thread(ThreadGroup group, Runnable target);

  • аналогично предыдущему, но дополнительно задается имя нового потока
  • public Thread(ThreadGroup group, Runnable target, String name);

  • создание нового потока с указанием группы и ее имени
  • public Thread(ThreadGroup group, String name).

    Чаще всего применяется второй конструктор из перечисленных в этом списке, с одним параметром-ссылкой на объект, для которого будет вызываться метод run. При использовании интерфейса Runnable метод run определен в главном классе приложения, поэтому в качестве параметра конструктору передается значение ссылки на этот класс (this). Обратите внимание, что в классе MultiThreadApp мы определили метод run. Его код будет работать как отдельный поток одновременно с кодом других методов аплета. Заметим, что метод run не вызывается напрямую, а получает управление при запуске потока методом start интерфейса Runnable.

    Из нашего класса MultiThreadApp помимо метода start можно вызывать и другие многочисленные методы интерфейса Runnable, предназначенные для управления потоками.



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