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() - повертає і видаляє елемент; якщо черга пуста - чекає, поки з'явиться елемент, повертає і видаляє його.


Коментарі

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

29. Соб. Как примитивные типы приводятся к непримитивным аналогам? Как непримитивные типы приводятся к примитивным? Как сравниваются примитивные и непримитивные типы? Всегда ли создается новый объект при операции autoboxing? Как работает кэширование при операции autoboxing? Для каких типов и/или значений работает кэширование?

30. Соб-2 Как установить бит в единицу в битовой маске? Как установить бит в ноль в битовой маске? Как получить значение определенного бита в битовой маске? Что такое ленивое вычисление выражения? Чем отличается использование && и & для типа boolean?