Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

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

Читайте также:
  1. II. Сравнение потоков и процессов
  2. III. Организация и проведение натуральных обследований структуры и интенсивности автотранспортных потоков на основных автомагистралях
  3. LINUX|| Реализация потоков в ОС Linux.
  4. Базова підтримка багатопотоковості
  5. Виды денежных потоков
  6. ГЛАВА 10: СИНХРОНИЗАЦИЯ
  7. Графический метод с использованием схемы грузопотоков (метод частичного перебора)
  8. Дисконтирование денежных потоков
  9. Дисконтирование денежных потоков
  10. Классификация денежных потоков с точки зрения их экономического содержания (видов деятельности).

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 может снизить производительность из-за большого числа наличия потоков. связанно это с тем, что большая часть времени работы многопоточных приложений уйдет на изменение контекста приложение, а не на выполнение отдельных потоков и программ.

 




Дата добавления: 2014-12-15; просмотров: 34 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав