..


Рекламные ссылки

Управление общих данных в Java

Статья написана Дамиано Verda
Страница 1 из 2

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

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

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

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

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

Сначала вы должны понять, каким образом мы можем гарантировать, что только одну программу сразу, а точнее только один поток одновременно (в один поток является основным компонентом процесса или программы, другими словами, программа может состоять из нескольких потоков, работать одновременно) может получить доступ к общей переменной. Механизм, который позволяет нам предлагать эту гарантию называется взаимное отчуждение.

Взаимное исключение

Представьте себе, развивается класс (или набора данных и методов, то есть полезные функции для обработки самих данных) называется Variabile_Condivisa структурирована следующим образом:






 открытый класс Variabile_Condivisa







 {



   



 euro_dollaro плавать;



   



 euro_sterlina плавать;





   



 Variabile_Condivisa ()



  



 {



     



 euro_dollaro = 1;



     



 euro_sterlina = 1;



  



 }





   



 set_euro_dollaro недействительным (поплавок e_d) = {euro_dollaro e_d;}



   



 set_euro_sterlina недействительным (поплавок e_s) = {euro_sterlina e_s;}





   



 get_euro_dollaro поплавок () {возвращение euro_dollaro;}



   



 get_euro_sterlina поплавок () {возвращение euro_sterlina;}







 }



Два заявления, и что euro_dollaro euro_sterlina, представляющие обменный курс евро / доллар и евро / фунт стерлингов, и что мы хотим поделиться информацией между несколькими программами (или между несколькими потоками). Методы, разработанные позволяют присвоить значение этих данных (и set_euro_dollaro set_euro_sterlina) и читать эти значения (и get_euro_dollaro get_euro_sterlina).

Затем мы определяем конкретный метод (Variabile_Condivisa), которая называется конструктор класса выполнен и что создание каждого Variabile_Condivisa, в данном случае путем установки значений переменных и euro_dollaro euro_sterlina устанавливаются в 1.

Затем мы создаем в нашей программе тип объекта именем уаг Variabile_Condivisa (класс представляет собой набор объектов с общими характеристиками, в то время объект представляет собой определенный элемент этого множества, которые можно ссылаться в рамках программы ) следующим образом:






 Variabile_Condivisa Variabile_Condivisa переменная = новый ();



Как мы теперь можем гарантировать, что Есть нет проблем в области управления данными общей уаг? Язык Java предоставляет ключевое слово (или ключевые слова) синхронизированы, который принимает любой объект в качестве параметра. Через синхронизированы, вы можете определить, как показано на примере блок кода:





 синхронизирован (VAR)







 {



  



 / / Синхронизированного блока кода разделителями (переменная)

  





 }



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

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

Таким образом, это гарантирует взаимное исключение, которое гарантирует, что только один поток может одновременно получить доступ к общей переменной. Следует отметить, однако, что необходимо тщательно выбирать объект, который будет передан в качестве параметра для синхронизированы. Он должен быть объект, общие для всех темы, в которых вы хотите создать механизм взаимного исключения, например, как в этом случае, переменная вы хотите прочитать или изменить.

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

В той же категории ...
E-Learning
Linux (курс) Linux (курс)
Полное руководство по открытым исходным кодом системы. От 49 €.
PHP (курс) PHP (курс)
Полный курс для создания динамических веб-сайтов. От 49 €.
Руби и Ruby On Rails (курс) Руби и Ruby On Rails (курс)
Создание программного обеспечения и веб-приложений с Рубином и RoR. С 39 €.
Рекламные ссылки