You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
+ Создать потомка класса `Thread` и переопределить его метод `run()`;
211
211
+ Создать объект класса `Thread`, передав ему в конструкторе экземпляр класса, реализующего интерфейс `Runnable`. Эти интерфейс содержит метод `run()`, который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод `run()`.
+ Вызвать метод `submit()` у экземпляра класса реализующего интерфейс `ExecutorService`, передав ему в качестве параметра экземпляр класса реализующего интерфейс `Runnable` или `Callable` (содержит метод `call()`, в котором описывается логика выполнения).
Copy file name to clipboardExpand all lines: core.md
+1
Original file line number
Diff line number
Diff line change
@@ -315,6 +315,7 @@ Unboxing происходит:
315
315
316
316
## Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
317
317
+ В Java класс может одновременно реализовать несколько интерфейсов, но наследоваться только от одного класса.
318
+
+ Интерфейсы описывают только поведение (методы), а состояния (поля) могут быть только константы
318
319
+ Абстрактные классы используются только тогда, когда присутствует тип отношений «is a» (является), то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом
319
320
+ Абстрактный класс - средство, позволяющее избежать написания повторяющегося кода, инструмент для частичной реализации поведения. Интерфейс - это средство выражения семантики класса, контракт, описывающий возможности. Все методы интерфейса неявно объявляются как `public abstract` или (начиная с Java 8) `default` - методами с реализацией по-умолчанию, а поля - `public static final`. Т.е. интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть.
320
321
+ Интерфейсы позволяют создавать структуры типов без иерархии.
Copy file name to clipboardExpand all lines: db.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -285,7 +285,7 @@ __Долговечность (durability)__. Независимо от проб
285
285
286
286
Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется. Транзакции, выполняющие только чтение, при данном уровне изоляции никогда не блокируются.
287
287
288
-
+__Чтение завершенных транзакций (read committed)__ — На этом уровне обеспечивается защита от чернового, «грязного» чтения, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных.
288
+
+__Чтение завершенных транзакций (read committed)__ — На этом уровне обеспечивается защита от чернового, «грязного» чтения, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. По умолчанию в MySql и PostgreSQL
289
289
290
290
Работает либо через __Блокирование читаемых и изменяемых данных__, т.е. пишущая транзакция блокирует изменяемые данные для читающих транзакций, работающих на уровне read committed или более высоком, до своего завершения, препятствуя, таким образом, «грязному» чтению, а данные, блокируемые читающей транзакцией, освобождаются сразу после завершения операции SELECT (таким образом, ситуация «неповторяющегося чтения» может возникать на данном уровне изоляции).
291
291
@@ -304,7 +304,7 @@ __Долговечность (durability)__. Независимо от проб
304
304
При параллельном выполнении транзакций возможны следующие проблемы:
305
305
306
306
+__Потерянное обновление (lost update)__ — когда две транзакции записывают разные значения в одну и ту же ячейку, одно из изменений теряется;
307
-
+__«Грязное» чтение (dirty read)__ — когда читаются данные, которые в этот момент изменяются транзакцией, а потом транзакция откатывается и данные исчезают.
307
+
+__«Грязное» чтение (dirty read)__ — когда читаются данные, которые в этот момент изменяются транзакцией, а потом транзакция откатывается и данные исчезают. В MySQl решается Read Uncommitted, в PostgreSQL - не поддерживается вообще
308
308
+__Неповторяющееся чтение (non-repeatable read)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество строк по одним и тем же критериям. Другая транзакция в интервалах между этими выборками меняет или удаляет данные, используемых в критериях выборки первой транзакции, и успешно заканчивается. Из-за этого результаты выборки в первой транзакции будут разными.
309
309
+__Фантомное чтение (phantom reads)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество строк по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет новые данные, используемых в критериях выборки первой транзакции, и успешно заканчивается. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.
0 commit comments