27 Гугл 1 goto. Зарезервовані (ключові) слова. wait не в блоці synchronized. happens-before. BlockingQueue. Методи BlockingQueue

  goto - оператор безумовного переходу в точку програми, позначену ярликом (label). В Java наразі не використовується, але слово все ще зарезервоване. Погіршує розуміння коду. Обмежує виконання оптимізацій JVM.


Зарезервовані (ключові) слова в Java - ідентифікатори, що мають спеціальне значення. Разом із синтаксисом операторів і роздільниками утворюють визначення мови Java. Компілятором клчові слова сприймаються як окрема команда, тому їх не можна використовувати в якості імені змінної, класу чи методу. 

У Java зарезервовано 50 слів.

Два з них не використовуються (const, goto).

Примітиви: byte, short, int, long, char, float, double, boolean

Цикли і розгалудження: if, else, switch, case, default, while, do, break, continue, for 

Виключення: try, catch, finally, throw, throws 

Область видимості: private, protected, public 

Оголошення/імпорт: import, package, class, interface, extends, implements, static, final, void, abstract, native 

Створення/повернення/виклик: new, return, this, super

Багатопотоковість: (synchronized, volatile) instanceof, enum, assert, transient, strictfp, const, goto



Якщо викликати wait не в блоці synchronized - код викине виключення IllegalMonitorStateException.



happens-before - набір правил для упорядкування JVM послідовності виконання операцій. Щоб гарантувати, що програмний потік, що виконує операцію Y, може бачити результати дії Х (незалежно від того, відбуваються операції Х та Y у одному потоці чи різних) між Х та Y  має бути відношення happens-before. 



BlockingQueue - різновид черги Queue, яка додатково підтримує операції, що очікують, поки черга не стане непустою при вилученні елемента.

BlockibgQueue має граничну ємність, за межі якої не можна вставити елемент без блокування. 

BlockingQueue не приймає пусті елементи. При додаванні нульового значення, реалізація викине виключення NullPointerException.

Всі реалізації, пов'язані з Blocking Queue є потокобезпечними. Методи виконуються використовуючи внутрішні блокування або інші форми управління паралелізмом. 

Методи BlockingQueue: 

1. М., що викидають виключення: 

add() - додає елемент в кінець черги, кидає виключення, коли черга повна;

element() - повертає перший елемент черги; кидає виключення, якщо черга пуста;

remove() - видаляє елемент, кидає виключення, коли черга пуста. 

2. М., що повертають значення: 

offer() - вставляє елемент в кінець черги, повертає false, якщо черга повна. Може використовуватись із таймаутами; 

peek() - повертає перший елемент черги; повертає null, якщо черга пуста;

poll() - видаляє елемент із черги; повертає null, якщо черга пуста.

3. M., що блокують операції: 

put() - вставляє елемент в чергу; якщо черга повна - чекає поки з'явиться вільне місце і потім вставляє елемент; 

take() - повертає і видаляє елемент; якщо черга пуста - чекає, поки з'явиться елемент, повертає і видаляє його.


Коментарі

Популярні дописи з цього блогу

28. Соб 1. Какие приоритеты нитей бывают? Можно ли остановить нить, снизив ее приоритет до 0? Зачем нужен класс ThreadGroup? В какой группе нитей состоит main-thread? Что такое паттерн ThreadPool?

27. Соб.2 Что происходит после вызова метода notifyAll? Какие выгоды получает объект, если он immutable? Что такое «thread-safe»? Что такое «happens-before»? Что такое JMM? Какое исключение вылетит, если вызвать wait не в блоке synchronized?