Лабораторная работа № 1. Введение в JAVA
Лабораторная работа №2. Апплеты
Лабораторная работа № 1. Введение в JAVA
Цель: разработка консольных приложений с возможностью записи и чтения в/из файла.
Теория:
Класс FileInputStream используется для чтения данных из файла. Конструктор такого класса в качестве параметра принимает название файла, из которого будет производиться считывание. При указании строки имени файла нужно учитывать, что она будет напрямую передана операционной системе, поэтому формат имени файла и пути к нему может различаться на разных платформах. Если при вызове этого конструктора передать строку, указывающую на несуществующий файл или каталог, то будет брошено java.io.FileNotFoundException. Если же объект успешно создан, то при вызове его методов read() возвращаемые значения будут считываться из указанного файла.
Для записи байт в файл используется класс FileOutputStream. При создании объектов этого класса, то есть при вызовах его конструкторов, кроме имени файла, также можно указать, будут ли данные дописываться в конец файла, либо файл будет перезаписан. Если указанный файл не существует, то сразу после создания FileOutputStream он будет создан. При вызовах методов write() передаваемые значения будут записываться в этот файл. По окончании работы необходимо вызвать метод close(), чтобы сообщить системе, что работа по записи файла закончена.
При работе с FileInputStream метод available() практически наверняка вернет длину файла, то есть число байт, сколько вообще из него можно считать. Но не желательно использовать его при написании программ, которые должны устойчиво работать на различных платформах,– метод available() возвращает число байт, которое может быть на данный момент считано без блокирования. Тот факт, что, скорее всего, это число и будет длиной файла, является всего лишь частным случаем работы на некоторых платформах.
На практике при считывании с внешних устройств ввод данных почти всегда необходимо буферизировать. Для буферизации данных служат классы BufferedInputStream и BufferedOutputStream.
Лабораторная работа №2. Апплеты
Цель: Научиться разрабатывать апплеты с использованием потоков.
Теория:
В отличие от большинства других машинных языков Java обеспечивает встроенную поддержку для многопоточного программирования. Многопоточная программа содержит две и более части, которые могут выполняться одновременно, конкурируя друг с другом. Каждая часть такой программы называется потоком, а каждый поток определяет отдельный путь выполнения (в последовательности операторов программы).
Потоки существуют в нескольких состояниях. Поток может быть в состоянии выполнения. Может находиться в состоянии готовности к выполнению, как только он получит время CPU. Выполняющийся поток может быть приостановлен, что временно притормаживает его действие. Затем приостановленный поток может быть продолжен (возобновлен) с того места, где он был остановлен. Поток может быть блокирован в ожидании ресурса. В любой момент выполнение потока может быть завершено, что немедленно останавливает его выполнение. После завершения поток не может быть продолжен.
Java назначает каждому потоку приоритет, который определяет порядок обработки этого потока относительно других потоков. Приоритеты потоков — это целые числа, которые определяют относительный приоритет одного потока над другим. Приоритет потока используется для того чтобы решить, когда переключаться от одного выполняющегося потока к другому. Это называется переключением контекста.
Потоку можно назначить приоритет от 1(константа MIN_PRIORITY) до 10(MAX_PRIORITY) С помощью метода setPriority(), получить значение приоритета можно с помощью метода getPriority().
Многопоточная система Java построена на классе Thread, его методах и связанном с ним интерфейсе Runnable. Thread инкапсулирует поток выполнения. Так как невозможно непосредственно обращаться к внутреннему состоянию потока выполнения, то взаимодействие с ним осуществляется через его полномочного представителя — экземпляр (объект) класса Thread, который его породил. Чтобы создать новый поток, выбранная программа должна будет или расширять Класс Threadили реализовывать интерфейс Runnable.
Класс Thread определяет несколько методов, которые помогают управлять потоками.