Skip to content

Commit 5e16776

Browse files
author
eugene.kalashnikov
committed
Рефакторинг
1 parent d3a05a6 commit 5e16776

File tree

6 files changed

+220
-16
lines changed

6 files changed

+220
-16
lines changed

concurrency.md

+13
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,19 @@ __Зелёные (легковесные) потоки__(green threads) - пот
209209
## Каким образом можно создать поток?
210210
+ Создать потомка класса `Thread` и переопределить его метод `run()`;
211211
+ Создать объект класса `Thread`, передав ему в конструкторе экземпляр класса, реализующего интерфейс `Runnable`. Эти интерфейс содержит метод `run()`, который будет выполняться в новом потоке. Поток закончит выполнение, когда завершится его метод `run()`.
212+
213+
```java
214+
new Thread(new Runnable() {
215+
@Override
216+
public void run() {
217+
someService.insertInBD(name);
218+
}
219+
}).start();
220+
221+
//то же самое с лямбдой
222+
new Thread(() -> someService.insertInBD(name)).start();
223+
```
224+
212225
+ Вызвать метод `submit()` у экземпляра класса реализующего интерфейс `ExecutorService`, передав ему в качестве параметра экземпляр класса реализующего интерфейс `Runnable` или `Callable` (содержит метод `call()`, в котором описывается логика выполнения).
213226

214227
[к оглавлению](#Многопоточность)

core.md

+1
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ Unboxing происходит:
315315

316316
## Чем абстрактный класс отличается от интерфейса? В каких случаях следует использовать абстрактный класс, а в каких интерфейс?
317317
+ В Java класс может одновременно реализовать несколько интерфейсов, но наследоваться только от одного класса.
318+
+ Интерфейсы описывают только поведение (методы), а состояния (поля) могут быть только константы
318319
+ Абстрактные классы используются только тогда, когда присутствует тип отношений «is a» (является), то есть класс-наследник расширяет базовый абстрактный класс, а интерфейсы могут быть реализованы разными классами, вовсе не связанными друг с другом
319320
+ Абстрактный класс - средство, позволяющее избежать написания повторяющегося кода, инструмент для частичной реализации поведения. Интерфейс - это средство выражения семантики класса, контракт, описывающий возможности. Все методы интерфейса неявно объявляются как `public abstract` или (начиная с Java 8) `default` - методами с реализацией по-умолчанию, а поля - `public static final`. Т.е. интерфейс описывает только поведение (методы) объекта, а вот состояний (полей) у него нет (кроме public static final), в то время как у абстрактного класса они могут быть.
320321
+ Интерфейсы позволяют создавать структуры типов без иерархии.

db.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ __Долговечность (durability)__. Независимо от проб
285285

286286
Типичный способ реализации данного уровня изоляции — блокировка данных на время выполнения команды изменения, что гарантирует, что команды изменения одних и тех же строк, запущенные параллельно, фактически выполнятся последовательно, и ни одно из изменений не потеряется. Транзакции, выполняющие только чтение, при данном уровне изоляции никогда не блокируются.
287287

288-
+ __Чтение завершенных транзакций (read committed)__ — На этом уровне обеспечивается защита от чернового, «грязного» чтения, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных.
288+
+ __Чтение завершенных транзакций (read committed)__ — На этом уровне обеспечивается защита от чернового, «грязного» чтения, тем не менее, в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. По умолчанию в MySql и PostgreSQL
289289

290290
Работает либо через __Блокирование читаемых и изменяемых данных__, т.е. пишущая транзакция блокирует изменяемые данные для читающих транзакций, работающих на уровне read committed или более высоком, до своего завершения, препятствуя, таким образом, «грязному» чтению, а данные, блокируемые читающей транзакцией, освобождаются сразу после завершения операции SELECT (таким образом, ситуация «неповторяющегося чтения» может возникать на данном уровне изоляции).
291291

@@ -304,7 +304,7 @@ __Долговечность (durability)__. Независимо от проб
304304
При параллельном выполнении транзакций возможны следующие проблемы:
305305

306306
+ __Потерянное обновление (lost update)__ — когда две транзакции записывают разные значения в одну и ту же ячейку, одно из изменений теряется;
307-
+ __«Грязное» чтение (dirty read)__ — когда читаются данные, которые в этот момент изменяются транзакцией, а потом транзакция откатывается и данные исчезают.
307+
+ __«Грязное» чтение (dirty read)__ — когда читаются данные, которые в этот момент изменяются транзакцией, а потом транзакция откатывается и данные исчезают. В MySQl решается Read Uncommitted, в PostgreSQL - не поддерживается вообще
308308
+ __Неповторяющееся чтение (non-repeatable read)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество строк по одним и тем же критериям. Другая транзакция в интервалах между этими выборками меняет или удаляет данные, используемых в критериях выборки первой транзакции, и успешно заканчивается. Из-за этого результаты выборки в первой транзакции будут разными.
309309
+ __Фантомное чтение (phantom reads)__ — одна транзакция в ходе своего выполнения несколько раз выбирает множество строк по одним и тем же критериям. Другая транзакция в интервалах между этими выборками добавляет новые данные, используемых в критериях выборки первой транзакции, и успешно заканчивается. От неповторяющегося чтения оно отличается тем, что результат повторного обращения к данным изменился не из-за изменения/удаления самих этих данных, а из-за появления новых (фантомных) данных.
310310

0 commit comments

Comments
 (0)