Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_MIR.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
83.46 Кб
Скачать

Синхронизация потоков

1 Когда двум или более потоком требуется доступ к совместно используемым ресурсам, то нужен способ доступа к ресурсам не более 1 потока в каждый момент времени. В Java это достигается при помощи процесса синхронизации. Решается данная проблема при помощи концепции монитора, который представляется объектом, используемым как взаимоисключающая блокировка, лишь один поток может владеть монитором в данное время. все другие потоки, которые требуют доступ в монитор будут приостановлены до его освобождения. Поток, который владеет монитором может повторно войти в монитор, если это необходимо. Для примера синхронизации потока разберем следующую программу. необходимо вывести на экран с помощью потоков следующую надпись (три слова, располож в кв. скобках).

[fgdshg]

[sgdhs]

[gdg]

Будут использоваться 3 класса.

1 класс - содержит метод, вызывающий первую строку.

class CallMe {

void call (string msg){

Systemout… (“[“+msg

try {

второй класс создает новый поток, который вызывает метод Run объекта

class Caller …

Runnable {

string msg

Callme target

третий класс будет создавать экземпляр класса CallMe и три экземпляра класса Coller каждый с уникальной строкой сообщения. Класс Coller будет получать один и тот же экземпляр класса CallMe.

class

public

….

После запуска данной программы результат работы мы видим в следующем варианте:

[Me[…[Java]

]

]

Данная ситуация происходит к непоследовательному доступу потокам к методу Call. Необходимо органичения доступа к методу лишь одним потоком. Для этого используется модификатор synchronized

Т.е. метод Call должен описываться следующим образом:

synchronized void Call (далее как в примере)

Это один из способов решения вопроса синхронизации.

Однако бывает необходимость в синхронизации метода класса, который не был разработан для многопоточного программирования, соответственно не имеет в своей структуры параллельно выполняющихся методов. synchronized (объект) {операторы класса, работу которых необходимо синхронизировать, при этом объект - ссылка на синхронизируемый объект}. Исходя из этой формы записи пример можно переписать следующим образом:

При этом следует помнить следующее: при многопоточном программировании в Java создавать потоки и их использовать следует с осторожностью, т.к. выполняющая система Java может снизить производительность из-за большого числа наличия потоков. связанно это с тем, что большая часть времени работы многопоточных приложений уйдет на изменение контекста приложение, а не на выполнение отдельных потоков и программ.

Сетевые приложение Java. Пакеты Java.Io Java.Net

Для реализации любого сетевого приложения на Java используется пакет Java.net, а точнее его основные классы URL и URLConnection.Класс URL - простой сетевой интерфейс и загрузка объекта, на который ссылается URL сводится к вызову единственного метода. При использовании этого класса можно открыть поток для чтения из объекта и поток для записи в объект. При этом объект класса URL может быть задан в виде единой строки путем указания адреса, так и раздельного указания порта, узла и протокола. Для работы с относительными URL класс URL работает совместно с классом string и у обоих классов есть соответствующие конструкторы. Класс URLConnection более сложен и содержит дополнит. методы для работы с объектамиURL на более высоком уровне. Т.е. объект URLConnection можно получить из заданного объекта URL. Класс URLConnection использует, если необходимо осуществлять строгий контроль сетевого приложения и действиями пользователя. Для этого выделяют 3 основных метода этого класса:

setDoInput

setDOOutput

позволяют орперделить для чего будет использован метод URLConnection (ввод/вывод). По умолчанию разрешен лишь ввод данных.

setAllowUserInterection - указывает разрешено ли во время передачи данных взаимодействие с пользователем, например, ввод пароля, чтение начальных данных из потока и т.д. по умолчанию взаимодействие разрешено. Если URL-протокол поддерживает операции чтения и записи, то методы getInputStream () getOutputStream возвращают потоки соотв. потоки ввода и вывода данных, которые работают с объектами URL и URLСonnection/

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]