Интерфейс 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, передавая ему в качестве параметра ссылку на аплет.
Ниже приведены прототипы конструкторов, с помощью которых можно создавать новые потоки:
public Thread();
public Thread(Runnable target);
public Thread(Runnable target, String name);
public Thread(String name);
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, предназначенные для управления потоками.