Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по ПСП.docx
Скачиваний:
25
Добавлен:
25.09.2019
Размер:
116.02 Кб
Скачать

23. Понятия сериализации и десериализации объектов

Кроме данных базовых типов, в потоках можно отправлять объекты классов. Процесс преобразования объектов в потоки байтов для хранения называется сериализацией. Десериализация это процесс восстановления объекта, из этих байт.

Для того, чтобы объекты класса могли быть подвергнуты процессу сериализации, этот класс должен реализовать интерфейс Serializable. Все подклассы такого класса так же будут сериализованны.

Интерфейс Serializable не имеет методов, которые необходимо реализовать, поэтому его использование ограничивается упоминанием при объявлении класса.

Для записи объектов в поток необходимо использовать класс ObjectOutputStream. После этого достаточно вызвать метод writeObject (Object ob) этого класса для сериализации объекта ob и преобразовать его в выходной поток данных.

24. Потоки выполнения. Многопоточное программирование

Поток выполнения – средство, которое помогает организовать одновременное выполнение нескольких задач, каждую в независимом потоке.

Потоки представляют собой классы, каждый из которых запускается и функционирует самостоятельно, автономно от главного потока выполнения программы.

Существуют 2 способа создания и запуска потока:

  1. Расширение класса Thread (class java.lang.Thread)

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

Многопоточность – принцип построения программы, при которой несколько блоков могут выполняться одновременно и не мешать друг другу.

Многопоточная программа содержит две и более частей, которые могут выполняться одновременно, конкурируя друг с другом. Каждая часть такой программы называется потоком, а каждый поток определяет отдельный путь выполнения (в последовательности операторов программы). Таким образом, много-поточность — это специализированная форма многозадачности.

25, 26. Способы создания и запуска потоков выполнения.

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

Для запуска новых потоков используется метод run(),который реализует основную логику выполнения потока и объявляется как

public void run()

Обеспечить реализацию метода run() можно двумя способами: путем расширения класса Thread и через интерфейс Runnable.

Расширение класса Thread

Класс Thread скрывает механизм запуска и контроля выполнения параллельного потока. Необходимо создать новый класс, который расширяет класс Thread , а затем создать экземпляр этого класса. В расширенном классе нужно заменить метод run() класса Thread , который является точкой входа для нового потока. Для запуска потока нужно вызвать метод start().

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

Интерфейс позволяет определить,ч то должен делать класс. Объявленные в нем методы не имеют тела. Назначение интерфейса - обеспечить динамический выбор метода по ходу выполнения программы.

Необходимо описать класс, который реализует интерфейс Runnable (выполняемый),а затем создать экземпляр данного класса. Интерфейс Runnable определяет только один абстрактный метод с именем run(),являющийся точкой входа потока. Позтому достаточно реализовать метод run(),внутри которого поместить операторы, которые должны выполняться в новом потоке. Далее необходимо создать экземпляр класса Thread, передав ему объект Runnable. Для поддержки интерфейса Runnable в ряд конструкторов класса Thread был введен отдельный параметр Runnable. Для запуска потока нужно вызвать метод start(). При выполнении поток будет вызывать метод run() объекта Runnable.

Для запуска потока на выполнение вы должны вызвать метод start:

public void start();

Как только приложение вызывает этот метод для объекта класса Thread или для объекта класса, реализующего интерфейс Runnable, управление получает метод run, определенный в соответствующем классе. В первом случае метод run должен быть определен в классе (ссылка на него указана конструктору класса Thread), создающем поток, а во втором - в классе, реализующем интерфейс Runnable.