Потоки Java: створення і завершення
Опубликованно 03.04.2018 22:35
Java — це високорівнева мова програмування, розроблений Sun Microsystems. Спочатку створювався для розробки програм для телеприставок і кишенькових пристроїв, але пізніше став популярним і затребуваним мовою для створення веб-додатків. Oracle придбала Sun Microsystems у січні 2010 року, тому Java тепер підтримується і поширюється Oracle.
Java застосовує модель об'єктно-орієнтованого програмування і може використовуватися для створення додатків, які можуть працювати на одному комп'ютері або розподілятися між серверами і клієнтами в мережі. Його також можна використовувати для створення невеликого модуля програми або аплету для використання в якості частини веб-сторінки.
Переваги
Синтаксис Java схожий на C ++, але є строго об'єктно-орієнтованою мовою програмування. Наприклад, більшість програм Java містять класи, які використовуються для визначення об'єктів та методів. Методи, в свою чергу, призначаються окремим класам. Java також відомий як більш сувора формальна знакова система, ніж C ++. Це означає, що змінні і функції повинні бути чітко визначено, що вихідний код може виявляти помилки або «виключення» легше і швидше, ніж інші мови. Це також обмежує інші типи помилок, які можуть бути викликані невизначеними змінними або неназначенными типами.
На відміну від виконуваних файлів Windows (.EXE-файлів) або додатків Macintosh файли .APP), програми Java не запускаються безпосередньо операційною системою. Замість цього дані інтерпретується віртуальною машиною Java або JVM, яка працює на декількох платформах. Всі Java-програми є мультиплатформовими і можуть працювати на різних платформах, включаючи комп'ютери Macintosh, Windows і Unix. JVM повинен бути встановлений для додатків або аплетів для запуску. Доступний у вигляді безкоштовного завантаження. Елементи і принципи
Успіху і популярності Java сприяли характеристики мови. Перелічимо основні з них:
Програми, створені на Java, володіють якістю переносимості в мережі. Вихідний код скомпільовано так, що мова програмування викликає байт-код, який можна запускати на будь-якому місці мережі на сервер або клієнт з віртуальною машиною Java (JVM). JVM інтерпретує байт-код в код, який буде працювати на комп'ютерному обладнанні. Навпаки, більшість мов програмування, таких як COBOL, C ++, Visual Basic або Smalltalk, компілюють код двійковий файл. Двійкові файли залежать від платформи, тому програма, написана для комп'ютера під управлінням Windows на базі Intel, не може запускати Mac, Linux-машину або мэйнфрейм IBM. JVM включає в себе необов'язковий компілятор Just-in-time (JIT), який динамічно компілює байт-коду у виконуваний код у якості альтернативи інтерпретації однієї інструкції байт-коду за раз. У багатьох випадках динамічна компіляція JIT швидше, ніж інтерпретація віртуальної машини.
Надійність коду. На відміну від програм, написаних на C ++ і деяких інших мовах, об'єкти Java не містять посилань на зовнішні дані або інші відомі об'єкти. Це гарантує, що інструкція не містить адресу зберігання даних в іншому додатку або в самій операційній системі, з-за чого програма і сама операційна система можуть завершитися або ініціювати збій в роботі. JVM виконує ряд перевірок на кожному об'єкті для забезпечення цілісності.
Java — об'єктно-орієнтована мова. Об'єкт може скористатися тим, що він є частиною класу об'єктів і успадковує код, який є спільним для класу. Даний метод можна розглядати як одну з можливостей або поведінки об'єкта. Об'єктно-орієнтований метод щодо поширений у сучасному ландшафті програмування, але ще в 1996 році лише кілька мов ефективно застосовували об'єктно-орієнтовані концепції та шаблони проектування.
Гнучкість аплетів. Java-аплет має всі характеристики, призначені для швидкого запуску.
Java проста для вивчення. Синтаксис мови аналогічний C ++. Якщо розробник володіє мовах С/С++, освоїти цю мову не складе праці.
Поширеною помилкою є те, що існує зв'язок між Java і JavaScript. Ці мови мають подібність у синтаксисі, але з конструктивної точки зору є різними структурами.
Платформи
Існують три ключові платформи, на яких програмісти розробляють Java-додатки:
Java SE — прості автономні програми розробляються з використанням Java Standard Edition. Раніше відомий як J2SE, Java SE надає API, необхідні для розробки традиційних настільних додатків.
Java EE — Java Enterprise Edition, раніше відома як J2EE, забезпечує можливість створення серверних компонентів, які можуть відповідати на веб-цикл запиту-відповіді. Така компоновка дозволяє створювати Java-програми, які можуть взаємодіяти з інтернет-клієнтами, включаючи веб-браузери, клієнти на базі CORBA і навіть веб-сервіси на основі REST і SOAP.
Java ME — Java також надає легку платформу для мобільного розробки, відому як Java Micro Edition, раніше відома як J2ME. Java ME зарекомендувала себе дуже популярною платформою для розробки вбудованих пристроїв, але вона з усіх сил намагалася домогтися успіху на арені розробки смартфонів. З точки зору розвитку смартфонів, Android став платформою мобільного розробки. Приклади використання
Використовуючи різні компоненти, що надаються Java EE, розробникам легко писати програми, в яких використовуються популярні шаблони проектування програмного забезпечення і універсально узгоджені передові методи.
Фреймворки Struts, Spring і JavaServer Faces використовують сервлет Java для реалізації шаблону проектування переднього контролера для централізації запитів.
Між тим більша частина екосистеми Java — це величезна кількість проектів з відкритим вихідним кодом, програмних платформ і API, які створило співтовариство з використанням мови. Наприклад, Apache Foundation розміщуються різні проекти, написані з використанням Java, в тому числі:
Прості рамки ведення журналів для Java (SLF4J).
Великі платформи обробки даних.
Інтеграційні платформи, такі як Apache Camel, Apache Axis і CXF для розробки веб-сервісів RESTful.
Платформи розробки микросервисов.
Інші підприємства спробують перевести середовища Java EE в хмару. Оскільки розробники створюють хмарні сервіси, можливість швидкого масштабування цих сервісів є ключовою проблемою, так само як і можливість спільної роботи в хмарі.Критика
Синтаксис Java часто засуджується за багатослівність. Надлишкові сетери і геттери, сильна типізація, роблять Java-програми роздутими. В якості відповіді " з'явилося кілька периферійних мов для вирішення цієї проблеми, в тому числі Groovy, які швидко стали набувати популярності.
Інший недолік полягає в тому, що Java-програми не можуть лінійно масштабуватися в світі високопродуктивних обчислень. Через те що Java посилається на об'єкти всередині, складні і паралельні операції на основі списку можуть призвести JVM до пошуку обхідних рішень. Мова Scala вирішує багато недоліків мови Java, які зменшують його здатність масштабування.
Потоки Java
Потоки — це парадигма програмування, винайдена Дж. Підлогою Родкер-Моррісоном в кінці 60-х років, в якій використовується поняття «обробка даних» для проектування і створення додатків. Потік Java визначає додатки мережі процесів, які обмінюються даними за допомогою блоків даних (інформаційних пакетів), що переміщаються по визначеним з'єднанням. Ці процеси можна підключати нескінченно, щоб сформувати додатки, не змінюючи їх внутрішній вміст. Таким чином потік орієнтується на компонент.
Створення потоку Java — це конкретна форма програмування потоку даних. Заснована на обмежених буферах, інформаційних пакетах з певними термінами служби, іменованих портах і окремому визначенні сполук.
Процеси взаємодіють через з'єднання, до яких звертаються через порти. Зв'язку зазвичай реалізуються через обмежені буфери. Розмір буфера або максимальна кількість пакетів, які може містити чергу, називається пропускною здатністю підключення. Деякі реалізації дозволяють встановлювати з'єднання з ємністю 0, що означає, що IP-адреси даних негайно передаються між процесами надсилання й отримання.Визначення
Потокове програмування розглядає програму як набір процесів («чорних ящиків»), що через з'єднання, до яких процеси звертаються за допомогою портів. Процес є екземпляром компонента, що працюють одночасно з іншими процесами, включаючи інші примірники одного і того ж компонента.
Загальний підхід в потоковому програмуванні полягає в концептуалізації програми як серії потоків і субпотоков, які протікають через ряд пов'язаних процесів. Паралелізм реалізується шляхом обмеження зв'язки між процесами з використанням інформаційних потоків пакетів при завершенні потоку Java.
Візуальне програмування в цьому контексті пов'язано з підключенням текстових компонентів або графіків в двовимірному поданні, яке використовує можливості розпізнавання образів людини і візуальні стилі мислення. Текстове програмування раніше доступно на рівні компонентів, а для простих додатків — на рівні мережі.
Основними характеристиками є повторне використання коду, тестування і паралельність.Введення
Потокове програмування визначає програми з використанням метафори «фабрика даних». Додаток розглядається не як єдиний послідовний процес, який починається в певний момент часу, а потім робить одну операцію в одиницю часу до повного завершення, а як мережа асинхронних процесів, сполучених за допомогою потоків структурованих блоків даних, званих інформаційними пакетами (IP). Мережа визначається зовнішніми процесами як список з'єднань, які інтерпретуються частиною програмного забезпечення, зазвичай званої планувальником.
Процеси взаємодіють через з'єднання з фіксованою ємністю. З'єднання підключається до процесу з допомогою порту, який має ім'я, узгоджене між кодом процесу і мережевим визначенням. Один і той же код може виконувати більше одного процесу. У будь-який момент часу даний IP-адреса може належати тільки одному процесу або знаходитися в дорозі між двома процесами. Порти можуть бути простими, або масивними.
Оскільки процеси потоків Java можуть продовжувати виконуватися як завгодно довго при наявності даних на введення і висновок, додатки із застосуванням цього методу зазвичай працюють за менший час, ніж звичайні програми, і оптимально використовують всі процесори на машині.Мережа
Визначення мережі зазвичай схематично і перетвориться в список з'єднань на якому-небудь мовою або нотації більш низького рівня. Потоки введення/виводу Java часто є мовою візуального програмування на цьому рівні. Більш складні визначення мереж мають ієрархічну структуру, яка складається з підмереж з гнучкими сполучними зв'язками. Інші приклади потоків Java засновані на традиційних мовах програмування. Зокрема RaftLib використовує C ++ і iostream-подібні оператори для виконання потоку Java.Опис процесу
Робота з потоками Java демонструє зв'язування даних як найбільш слабке з'єднання між компонентами. Концепція вільної зв'язку, в свою чергу, пов'язана з концепцією сервіс-орієнтованих архітектур. Пул потоків Java відповідає ряду критеріїв для такої архітектури.
Потоковий метод сприяє високорівневому функціонального стилю специфікацій, які спрощують розробку гіпотетичних передумов поведінки системи. Прикладом потоків Java є модель розподіленого руху даних для конструктивного створення та аналізу семантики розподілених протоколів.Характеристики
Потокове програмування володіє наступними унікальними властивостями:
Структурність: діаграми і компоненти мають чітку структуру (інтерфейс, стан і поведінку).
Дизайн системи розділений на два шари: графічний (зазвичай візуальний) і компонентний (зазвичай текстовий). З точки зору архітектури програмного забезпечення заохочуються різні ролі. В якості прикладу: потоки Java управляються рольовими функціями «Дизайнер графіків» і «Компонент-реалізатор».
Принцип паралелізму: кожен процес працює у своєму потоці, супутньої програмі або іншому середовищі.
Активація — з точки зору дизайнера точки графіка процесу виконуються одночасно, а функція програмного забезпечення планування дозволяє розподіляти процесорний час і керувати іншими службами по мірі необхідності, щоб підтримувати цей функціонал.
Інформаційні пакети при створенні потоку Java мають життєвий цикл і належать тільки одному процесу.
Компоненти можуть мати кілька входів або виходів.
Додаток являє собою графік, а не дерево. Можна циклічні сполуки (петлі зворотного зв'язку).
З'єднання можуть бути об'єднані в графік, маючи на увазі, що пакети з різних дуг надходять на вхідний порт. З'єднання повинні бути розділені через компонент із-за різноманітності стратегій розподілу і правила володіння IP.
З'єднання реалізовані як обмежені буфери з об'ємом від 0 до числа, обмеженого реалізацією.Приклади
Компоненти потоків даних Java часто утворюють взаємодоповнюючі пари. У звичайній логіці програміст швидко виявляє, що ні вхідні, ні вихідні структури не можуть використовуватися для управління ієрархією викликів потоку управління. В потоках введення Java сам опис проблеми пропонує рішення.
«Слова» явно вказані в описі проблеми, тому розробнику необхідно розглядати їх як інформаційні пакети (IP). В потоках введення Java немає єдиної ієрархії викликів, тому у програміста немає необхідності налаштовувати пріоритезацію.
При створенні потоку Java вихідні інформаційні пакети (IIP) можуть використовуватися для вказівки параметричної інформації, такої як бажана довжина вихідний запису або імена файлів. IIP - це блоки даних, пов'язані з портом у визначенні мережі, які стають «звичайними» IP-адресами, коли «отриманий» параметр видається для відповідного порту.
Пакетне оновлення
Цей тип програми включає передачу файлу відомостей (змін, доповнень і вилучень) на головний файл і створення оновленого основного файлу і одного або декількох звітів. Новий потік Java досить складно кодувати з використанням синхронного процедурного коду, оскільки два (іноді більше) потоку вводу повинні синхронізуватися.
У потокової архітектурі компонент багаторазового використання значно спрощує запис цього типу додатка, оскільки цей інструмент поєднує два потоку і вставляє дані IP, щоб вказати рівні угруповання. Припустимо, що один або два потоку Java складаються з IP-адрес з ключовими значеннями 1, 2 і 3, а IP-адреси другого потоку має ключові значення 11, 12, 21, 31, 32, 33 і 41, де перша цифра відповідає значенням головного ключа. Використовуючи символи дужок для відображення IP-адрес, зібраний вихідний потік буде виглядати наступним чином: (m1 d11 d12) (m2 d21) (м3 d31 d32d33) (d41).Процеси мультиплексування
Потокове програмування підтримує мультиплексування процесів. Оскільки компоненти доступні тільки для читання, будь-яку кількість екземплярів даного компонента («процеси») може виконуватися асинхронно один з одним.
Коли комп'ютери мали один процесор, це було корисно, коли багато операцій вводу-виводу потоків Java тривало. Тепер, коли машини мають кілька процесорів, це стає дійсно корисним інструментом. Потоки Java Thread працюють за принципом багатозадачності.DrawFBP як інструмент
Потокове програмування є парадигмою, де програми створюються з компонентів, які мають набір певних вхідних і вихідних портів. Ці порти з'єднуються разом, щоб скласти графік, який визначає логіку і потік даних. DrawFBP — це настільне додаток, яке може визначати графіки програм на основі потоків для Java і C #. Це найбільш функціонально повний інтерфейс потокового програмування, але він дещо обмежений можливостями міжмережевого екрану Java і неможливістю інтроспекції інформації, доступної через інтерфейс завантаження компонентів.
Ключовою частиною інтерфейсу є спрощення створення і розуміння програм на основі методу потоків.
Категория: Техника