Daemon потоки в Java
#java #concurrency

Несколько фактов про Daemon потоки в Java:
1) В Java есть два вида потоков: User и Daemon
2) JVM будет ждать завершения всех User потоков (не Daemon)
3) Если были завершены все User потоки, то JVM не будет ждать завершения работы Daemon потоков. JVM просто завершит свою работу. Никакие finally блоки в Daemon потоках также не будут выполнены. Поэтому не рекомендуется производить никакие I/O операции в Daemon потоках.
4) Из 3) есть исключение. Если был вызов .join() на выполняющемся Daemon потоке, то это может помешать завершению работы JVM. Поэтому это не рекомендуется делать.
5) Daemon потоки обычно используется для вспомогательной логики. Потоки самой JVM (например GC) являются Daemon потоками.
6) Чтобы сделать поток Daemon, нужно вызвать .setDaemon(true);
7) Если вызвать setDaemon после start(), то это приведет к IllegalThreadStateException. Вызов нужно делать после создания потока, но перед start
8) Daemon флаг наследуется от родительского потока. Если вы в Daemon потоке создали еще один поток, то он будет Daemon по умолчанию.
8) Daemon потоки имеют более низкий приоритет по сравнению с другими потоками
👍9
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки.

Подборку составил из постов, которые я уже публиковал ранее в этом канале. Часть опубликована на medium (возможно потребуется vpn).

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
🔥26👍81
Может ли такой код привести к deadlock?
#java #concurrency

class A {
public synchronized void foo() {
...
}
}

class B extends A {
public synchronized void foo() {
...
super.foo();
}
}

Как мы видим, оба метода foo в классе A и классе B synchronized. Синхронизация в данном случае на одном и том же объекте.
Обычно deadlock возникает в многопоточной среде, когда потоки получают локи на хотя бы двух объектах в разном порядке.
Например,
void foo(Object obj1, Object obj2) {
synchronized(obj1) {
synchronized(obj2) {
....
}
}
}
и один поток вызывает foo(obj1, obj2), а второй поток вызывает foo(obj2, obj1), то может возникнуть deadlock. Т.к. один поток получит лок на один объект и будет ждать получения лока на второй объект. А второй поток наоборот. Получит сначала лок на второй и будет ждать получения лока на первый объект, который держит первый поток.
В данном случае ситуация иная. У нас всего один объект.

Давайте посмотрим, что будет если у нас всего один поток.
Например, у нас такой код B b = new B(); b.foo();
Вызывающий поток получит лок на B при вызове foo из класса B. Далее дойдет до кода super.foo(). Этот вызов тоже synchronized на том же объекте.
Лок на этот объект уже получен вызывающим потоком. И если бы в Java synchronized был бы не reentrant, то поток бы ждал пока лок отпустят, чтобы его получить. В таком случае мог бы возникнуть deadlock. Но в силу того, что в Java synchronized в Java Reentrant один и тот же поток может получить лок на один и тот же объект множество раз. Для каждого такого лока (монитора) есть некий счетчик(сколько раз получен монитор на данный объект) и идентификатор потока, который его получил. Лок может получить только один поток, но множество раз. Как только счетчик упадет до нуля, это значит, что другой поток может получить теперь монитор (лок) на данном объекте.

Поэтому deadlock не возникнет благодаря свойству reentrancy локов при помощи synchronized (intrinsic locks).
👍14
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки.

Подборку составил из постов, которые я уже публиковал ранее в этом канале. Часть опубликована на medium (возможно потребуется vpn).

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy

SQL:
23) Типы SQL joins
24) Плюсы и минусы индексов
👍114
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Статьи, которые были на medium, мигрировал на dev.to. Напишите, если есть какие-то проблемы с форматированием или ссылками после миграции.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy

SQL:
23) Типы SQL joins
24) Плюсы и минусы индексов
🔥153👍3💘3
Вопрос с собеседования по Java: что такое Java Memory Model и happens-before
#java #concurrency

Более подробно можно почитать в книге Java Concurrency in Practice by Brian Goetz. Которую, я уже рекомендовал в этом канале.

Кратко написал тут: https://dev.to/faangmaster/vopros-s-sobiesiedovaniia-chto-takoie-java-memory-model-i-happens-before-410g
👍162
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy
23) Java Memory Model и happens-before
24) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap

SQL:
25) Типы SQL joins
26) Плюсы и минусы индексов
👍22🔥32❤‍🔥1
Задача с собеседования: Реализовать потокобезопасную неблокирующую очередь на Java
#java #concurrency

Задача. Реализовать потокобезопасную (Thread Safe) неблокирующую очередь на Java Т.е. нельзя использовать локи или synchonized, при этом она должна корректно работать в многопоточной среде.
Решение. Описал тут: Реализовать потокобезопасную неблокирующую очередь на Java

Смотрите также: Реализовать потокобезопасный неблокирующий стек на Java
👍13🔥5
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy
23) Java Memory Model и happens-before
24) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap
25) Реализовать потокобезопасную неблокирующую очередь на Java

SQL:
26) Типы SQL joins
27) Плюсы и минусы индексов

Spring:
28) Что такое @Autowire в Spring? Как его использовать и как он работает?
👍14🔥7
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize

Многопоточность:
10) Перевод между банковскими аккаунтами (dead-lock).
11) Ping-Pong (wait-notify).
12) Приостанавливаемый поток.
13) Подборка вопросов по многопоточности
14) Напечатать последовательность чисел при помощи нескольких потоков на Java.
15) ConcurrentModificationException
16) Thread Safe Singleton
17) Обедающие философы
18) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
19) Реализовать потокобезопасный неблокирующий стек на Java
20) Daemon потоки
21) Является ли immutable class в Java Thread safe?
22) Implicit Lock Reentrancy
23) Java Memory Model и happens-before
24) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap
25) Реализовать потокобезопасную неблокирующую очередь на Java
26) Вопрос с собеседования на Java программиста: Как выполнить код в отдельном потоке в Java?

SQL:
27) Типы SQL joins
28) Плюсы и минусы индексов

Spring:
29) Что такое @Autowire в Spring? Как его использовать и как он работает?
🔥13👍6💘3
Записал видео урок по массивам для начинающих

Видео предназначенно для начинающих и не предназначенно для подготовки к собесам. Только как пререквезит, перед более глубоким изучением.

https://youtu.be/eSloKL3XUEE?si=eT7arTMMalLUk1Q_
👍23🔥81
Алгоритм Бинарного Поиска

Перезалил. Немного поправил громкость звука.

https://youtu.be/f2nYeGTkMog?si=VnNlVbgZ8nrKJ4w_
👍18
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize
10) Как внутри устроен HashSet?

Многопоточность:
11) Перевод между банковскими аккаунтами (dead-lock).
12) Ping-Pong (wait-notify).
13) Приостанавливаемый поток.
14) Подборка вопросов по многопоточности
15) Напечатать последовательность чисел при помощи нескольких потоков на Java.
16) ConcurrentModificationException
17) Thread Safe Singleton
18) Обедающие философы
19) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
20) Реализовать потокобезопасный неблокирующий стек на Java
21) Daemon потоки
22) Является ли immutable class в Java Thread safe?
23) Implicit Lock Reentrancy
24) Java Memory Model и happens-before
25) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap
26) Реализовать потокобезопасную неблокирующую очередь на Java
27) Вопрос с собеседования на Java программиста: Как выполнить код в отдельном потоке в Java?

SQL:
28) Типы SQL joins
29) Плюсы и минусы индексов

Spring:
30) Что такое @Autowire в Spring? Как его использовать и как он работает?

Бонус:
31) Логическая задача про лошадей. Решение: тут
29👍6🔥6
Подборка вопросов и ответов для подготовки к собеседованию на Java программиста
#java #interview #собеседование

Обновление подборки из статей, которые я уже написал и опубликовал в этом канале.

Общие вопросы:
1) Методы класса Object
2) Иерархия и типы исключений
3) GC
4) Сравнение строк в Java

Коллекции:
5) HashMap
6) ArrayList vs LinkedList
7) Иерархия коллекций в Java
8) Иерархия Map
9) Maximum ArraySize
10) Как внутри устроен HashSet?

Memory Leaks:
11) ThreadLocal Memory Leaks

Многопоточность:
12) Перевод между банковскими аккаунтами (dead-lock).
13) Ping-Pong (wait-notify).
14) Приостанавливаемый поток.
15) Подборка вопросов по многопоточности
16) Напечатать последовательность чисел при помощи нескольких потоков на Java.
17) ConcurrentModificationException
18) Thread Safe Singleton
19) Обедающие философы
20) Реализовать потокобезопасную блокирующую очередь на Java ограниченного размера
21) Реализовать потокобезопасный неблокирующий стек на Java
22) Daemon потоки
23) Является ли immutable class в Java Thread safe?
24) Implicit Lock Reentrancy
25) Java Memory Model и happens-before
26) ConcurrentHashMap vs Collections.synchronizedMap vs Hashtable vs HashMap
27) Реализовать потокобезопасную неблокирующую очередь на Java
28) Вопрос с собеседования на Java программиста: Как выполнить код в отдельном потоке в Java?

SQL:
29) Типы SQL joins
30) Плюсы и минусы индексов

Spring:
31) Что такое @Autowire в Spring? Как его использовать и как он работает?

Бонус:
32) Логическая задача про лошадей. Решение: тут
👍105