- •Вопросы по дисциплине «Информационные технологии»
- •Основы платформы Java. Основные семейства технологии Java.
- •Типы Java-приложений.
- •3. Основные возможности Java. Компиляции и исполнение программ на Java.
- •4. Типы данных языка Java., объектные переменные, объекты, ссылки.
- •5. Управление памятью на Java.
- •6. Интерфейс jdbc, основные классы и методы
- •7. Создание многопоточности средствами Java
- •8. Серверные приложения языка Java. Сервлеты
- •Jsp страница
- •Рассмотрим некоторые из таких директив.
- •10. Пакеты Java
- •11. Механизм создания Javadoc
- •12. Механизм исключений
7. Создание многопоточности средствами Java
Разработка приложений на основе потоков, то есть особых последовательностей команд, обеспечивает значительный прирост производительности. Рассмотрим, например, программу-проигрыватель DVD, которая считывает большие объемы данных с компакт-диска, обрабатывает их и выводит изображение на экран. Обычные однопоточные программы – а это большинство современных клиентских программ – выполняют перечисленные действия последовательно. В данном примере обработка данных начнется лишь после того, как с диска будет считан определенный объем информации. Производительность такой программы невысока: ресурсы, которые могут использоваться для обработки, не будут задействованы, пока идет считывание следующей порции информации с диска.
В многопоточной версии проигрывателя один поток предназначался бы для считывания информации, второй – для обработки, а третий – для записи данных в видеобуфер, причем все они выполнялись бы параллельно, а обработка продолжалась бы даже во время чтения с диска – прирост производительности налицо! Именно для увеличения производительности и реализована многопоточность в виртуальной машине Java* (JVM).
Организация многопоточности в коде Java
В среде Java для создания потока и назначения им функций есть два способа. Первым из них является наследование от класса Thread (входящего в пакет java.lang) с последующим переопределением метода run() на функцию, которую вы хотите назначить для потока. Ниже приведен пример кода:
public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getName()); try { sleep((long)(Math.random() * 1000)); } catch (InterruptedException e) {} } System.out.println("DONE! " + getName()); } } |
Ниже приведен пример функции для создания потока:
public class TwoThreadsDemo { public static void main (String[] args) { new SimpleThread("Do it!").start(); new SimpleThread("Definitely not!").start(); } }
|
|
|
JVM будет запускать потоки по порядку, при котором они будут обрабатываться быстрее всего, но при этом неизвестно, когда именно запустится определенный поток. Поэтому в случае необходимости можно установить приоритет для потоков, которые JVM должна обработать первыми. Второй способ создания потока – использование класса с реализацией интерфейса Runnable (также из пакета java.lang). Этот интерфейс определит метод run(), который будет выполнять основную функцию потока.
8. Серверные приложения языка Java. Сервлеты
Сервлет является Java-классом, расширяющим функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ. Сервлеты должны реализовывать Servlet интерфейс, который определяет методы жизненного цикла. Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.
Жизненный цикл сервлета состоит из следующих шагов:
В случае отсутствия сервлета в контейнере.
Класс сервлета загружается контейнером.
Контейнер создает экземпляр класса сервлета.
Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только однажды.
Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.
В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.
9. Технология Java Server Pages. Директивы <jsp: …>.
Технология Java Server Pages (JSP) является составной частью единой технологии создания бизнес-приложений J2EE. JSP - это альтернативная методика разработки приложений, динамически генерирующих ответ на те или иные запросы клиента. Прежде чем JSP документ будет использован, специальная процедура преобразует его в соответствующий сервлет. В свою очередь, сервлет, как правило, пишется на языке Java и реализует определенный интерфейс. Далее, сервлет также не является самостоятельным приложением и функционирует, только будучи помещен в соответствующий web-контейнер. Web-контейнер обеспечивает обмен данными между сервлетом и клиентами, берет на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.
Например, фрагмент сервлета, где осуществляется генерация динамической HTML страницы, может выглядеть следующим образом:
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<body>");
...
out.println("</body>");
out.println("</html>");
out.close();
