ENUM, nested classes, concurrency Flashcards
ENUM instance methods
1) compareTo(EnumObj) сравнивает по ordinal-у
2) name() возвращает строковое представление имени перечисления (то же самое происходит при toString())
3) У каждого объекта перечисления есть цифровой уникальный номер, возвращается методом int ordinal() - при смене порядка в самом класс ординал также меняется
Enum static methods
1) Enum[] values() возвращает всех представителей
2) valueOf(String), преобразующий название объекта перечисления в ссылку на объект. Будет выброшено illegalArgumentException если такого значения нет. Чувствителен к регистру.
Особенности статического вложенного класса
- Любая видимость
- Может обращаться к приватным членам внешнего класса
- Нэймспейс с внешним членом
!!!В остальном аналогичен обычному топ-левел классу.
Особенности локального класса
- могут быть объявлены в любом блоке кода (даже в инициализаторе в т.ч. статическом)
- не могут иметь модификатор видиомсти и по сути видимы только в блоке кода
- как и обычный внутренний класс не могут иметь статических членов кроме констант
- как и обычный внутренний метод имеют доступ ко всем членам внешнего класса (если объявлен в статическом блоке кода то только к статическим).
- могут иметь доступ к эффективно финальным переменным
Особенности внутреннего класса
- Любая видимость
- Может обращаться к приватным членам внешнего класса
- не могут иметь статических членов кроме констант
- Нэймспейс с внешним членом
- может быть абстрактным и финальным
- доступ к this внешнего класса через MyInner.this
- создание объекта внутреннего класса outerObj.new Inner()
Особенности анонимного класса
- Может обращаться к приватным членам внешнего класса
- не могут иметь статических членов кроме констант
- доступ к this внешнего класса через MyInner.this
- объявление анонимного класса только одновременно с присваиванием- в конце всегда ;
- не может иметь конструкторов (можно использовать инициализаторы)
- не может быть множественное наследование для анонимного класса
Var аргументы в лямбде
Если используется хоть один var для типа аргумента, то остальные тоже должны использовать var
Может ли быть static метод final
В обычном классе может быть. В интерфейсе нет- ошибка компиляции
Что может быть выражением для сравнения в switch
- целочисленное значение (char, int etc.) кроме long и их враппер классы.
- строки (используется equals)
- перечисления(если значение для сравнения null кидает npe) (перечисления при этом в блоке case используются без имени класса ,т.е. BEAR а не Animal.BEAR- иначе ошибка компиляции.
P.S. var переменные если их тип входит в список разрешенных.
java.util.concurrent.Future методы isDone,isCancelled, get,cancel
boolean isDone() Returns true if the task was completed, threw an exception, or was cancelled
boolean isCancelled() Returns true if the task was cancelled before it completed normally
boolean cancel(boolean mayInterruptIfRunning) Attempts to cancel execution of the task and returns true if it was successfully cancelled or false if it could not be cancelled or is complete
V get() Retrieves the result of a task, waiting endlessly if it is not yet available
V get(long timeout, TimeUnit unit) Retrieves the result of a task, waiting the specified amount of time. If the result is not ready by the time the timeout is reached, a checked TimeoutException will be thrown.
java.util.concurrent.ExecutorService методы запуска, закрытия и массвого запуска
shutDown() прекращает принятие новых заданий(кидает RejectedExecutionException) и закрывает пул когда уже принятые задания завершаются (если не закрыть то создастся вечная нить и программа не завершится).
Но продолжает выполнять уже запущенные задачи (isShutdown вернет true, а isTerminated вернет false). Когда все задачи выполнятся- то перейдет в состояние Terminated.
shutDownNow() пытается закрыть пул и все задачи в данный момент, но не все задачи закрываются,метод возвращает список задач в очереди, которые ,были добавлены в очередь но еще не были запущены.
awaitTermination(время, единицы времени)- ждет завершения задач- и на это время блокирует поток,разблокирует либо при истечении таймаута, либо если все задачи завершаются.
void execute(Runnable)- добавляет задачу в очередь
Future и Future submit (Runnable и Callable) - аналог execute для объектов с интерфейсом Callable, только он возвращает объект Future.
Также call в отличие от run позволяет пробрасывать исключения.
List> invokeAll(Collection> ) синхронно (т.е. поток ждет выполнения метода) запускает все задачи и возвращает будущие результаты всех из них.
T invokeAny(Collection>) синхронно (т.е. поток ждет выполнения метода) запускает все задачи и возвращает результат одной, успешно выполненной (не Future), все остальные не законченные закрывает. У invokeAll и invokeAny есть перегруженные версии с таймаутом.
ScheduledThreadPoolExecutor методы
-schedule(runnable или callable,inititaldelay,единицы измерения))и с определенным промежутком времени
-scheduleAtFixedRate(runnablel,начальная задержка, преиодическая задержка, единицы измерения)) и -sheduleWithFixedDelay(runnable,начальная задержка (от конца прошлой задачи), преиодическая задержка, единицы измерения))).
Данные методы возвращают SheduledFuture, который имеет дополнительный метод getDelay- возвращаюший оставшееся время до начала выполнения.
ВИды Executors
- newSingleThreadExecutor- создает одну нить и выполняет задачи по очереди (то есть при запуске трех runnable в данный ексекьютор они будут выполнены по очереди как были добавлены).
- newFixedThreadPool- создает пул из фиксированного количества нитей.
- newCachedThreadPool- переиспользует нити, если нитей не хватает- создает новые. Рекомендуется для коротких мало живущих тасок.
- newScheduledThreadPoolExecutor и newSIngleThreadScheduledExecutor- позволяют запускать задачи с задержкой (методом schedule(runnable или callable,inititaldelay,единицы измерения))и с определенным промежутком времени (scheduleAtFixedRate(runnablel,начальная задержка, преиодическая задержка, единицы измерения)) и sheduleWithFixedDelay(runnable,начальная задержка (от конца прошлой задачи), преиодическая задержка, единицы измерения))). Данные методы возвращают SheduledFuture, который имеет дополнительный метод getDelay- возвращаюший оставшееся время до начала выполнения.
Atomic классы и методы
Классы AtomicBoolen AtomicInteger,AtomicLong,AtomicReference - изменяемые классы.
Методы: compareAndSet(предполагаемое значение, новое значение) если текущее значение равно предполагаемому, устанавливает новое.
Методы:
getAndSet(новое значение) устанавливает новое значение возвращая старое
get/set
in/decrementAndGet
getAndIn/Decrement
Atomic классы и методы
Классы AtomicBoolen AtomicInteger,AtomicLong,AtomicReference - изменяемые классы.
Методы:
-compareAndSet(предполагаемое значение, новое значение) если текущее значение равно предполагаемому, устанавливает новое.
-getAndSet(новое значение) устанавливает новое значение возвращая старое
-get/set
-in/decrementAndGet
-getAndIn/Decrement