Публікації

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

    27.6  Що відбувається після виклику метода notifyAll? notifyAll () надсилає сповіщення всім ниткам у стані очікування звільнення об’єкта-мютекса; всі нитки пробуджуються; як тільки поточна нитка вийде з блока  synchronized , одна з пробуджених ниток займе мютекс; решта ниток після перевірки умови цикла знов перейдуть у стан очікування (хибне пробудження).   27.7  Які переваги отримує об’єкт, якщо він immutable? Immutable   (незмінний)  об’єкт – це об’єкт, стан якого після створення неможливо змінити (всі поля екземпляру позначені  final ).  Найпростіший приклад –  java . lang . String . Всі методи, які викликаються повертають новий рядок, а не модифікований вихідний. Переваги  immutable -об ’ єктів: 1)        Потокобезпечність – І m - o   не вимагають синхронізації при багато потоковому доступі, їх вільно можна використовувати з різних потоків. 2)     ...

27 Соб.1 Что такое дедлок? Какие вы знаете стратегии, предотвращающие появление дедлоков? Могут ли возникнуть дедлоки при использовании методов wait-notify? Что чаще используется: notify или notifyAll? Метод wait рекомендуется использовать с конструкциями if или while?

    27.1     Що таке дедлок?   Дедлок (англ..  deadlock ) - взаємне блокування – ситуація, при якій два чи більше програмних потоків не можуть продовжити роботу, так як знаходяться в стані очікування ресурсів, зайнятих один одним, і жоден з них не може продовжити роботу. Н-д: Є дві нитки ( thread ), кожній нитці потрібно захопити два мютекси -> перша нитка захопила перший мютекс -> друга нитка захопила другий мютекс -> перша впоралась з роботою, чекає звільнення другого мютексу (у другому ще виконує дії друга нитка) -> друга нитка виконала дії, чекає звільнення першого мютексу (перший зайнятий першою ниткою, яка очікує).    Н-д: менеджер зробив термінове замовлення у постійного постачальника, який працює по передоплаті, керівник забороняє оплачувати рахунок поки не буде прийнятий товар. Нитка бухгалтер взяла рахунок - >  нитка постачальник оформила замовлення - > нитка бухгалтер очікує підтвердження прийняття товару, що...

27. Гугл 2 Як скомпілювати java-файл із консолі? Як запустити java-файл із консолі? Як запустити програму з декількох скомпільованих файлів з консолі? Як створити директорію з піддиректоріями? Як отримати список файлів в директорії за маскою (шаблоном) «*doc»?

27.  6. Як скомпілювати java -файл із консолі? Викликаємо консоль: заходимо в папку де збережено потрібний файл . java ->   затискаємо shift + клацаємо правою клавішею миші на вільному місці папки ->   обираємо «відкрити вікно команд». Компіляція файла: в консолі набираємо команду javac і в якості параметра прописуємо повне ім’я файла (із розширенням). Н-д: javac Main . java Ця команда викличе компілятор, який c компілює вихідний код (якщо у коді немає помилок) і збереже байт-код у файлі з такою ж назвою, але розширенням . class       7. Як запустити java -файл із консолі? Викликаємо консоль як і при компіляції, прописуємо команду java і в якості параметра назву класу ( c компільованого коду, без розширення . class ).   Н-д: java Main Цією командою викликається запускалка java . exe , яка запустить вказану програму.   Якщо в консолі з’ явились кракозябри –   це збите кодування. Прописуємо в консолі ...

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...