1. Переменную count хочешь быстро заинкрементировать до 10 тыс. В цикле запустил 10 тыс. потоков, которые инкрементят счетчик. Решил сделать синхронизацию. Какой способ выбрать: synchronized или atomic? Почему?
2. Как сделать так, если 10 потоков вызывают get() одновременно, ты не создал 10 объектов Singletone?
3. Может ли быть, что разные потоки всегда видят актуальное значение переменной, хотя она НЕ помечена volatile?
4. Есть статичный метод, в его сигнатуре пишу synchronized. На чем будет происходить синхронизация?
5. Есть объект, внутри синхронизированный метод, к которому могут обратиться несколько потоков. Предположите, когда синхронизированный метод не сработает и получим коллизию?
6. Пишем генерацию отчета. Мне надо сходить в 4 системы по HTTP и получить данные. Хотим ускорить с помощью многопоточки. Как сделать?
7. Есть 5 разных потоков. Есть метод объекта, который потоки хотят плюс-минус одновременно дернуть, но нужно, чтобы дернул только один. Что делать в первую очередь
8. На atomic переменной сделали счетчик. Изначально значение переменной 0. Два потока прибавляют 1 одновременно.
9. Есть несколько потоков, мы хотим, чтобы они все стартанули одновременно. Как это сделать средствами Java?
10. В коде нужно сделать паузу. Нельзя использовать классические способы Thread sleep, wait. Как нам реализовать паузу?
11. Нужно сделать систему мониторов, мьютексов, чтобы таски выполнять согласованно. Какой concurrency интерфейс использовать? Методы, классы, интерфейсы, которые предоставляют механизмы блокировок?
12. Есть счетчик. Запустили 100 потоков. По итогу у нас будет значение 100?
13. В одном потоке перебирается коллекция, а в другом потоке из коллекции что-то удаляется. Что делать, чтобы не было ошибки?
14. У хэшмап планируем использовать в качестве некого счетчика для действий пользователя. В качестве ключа у нас пользователь, в качестве значения счетчик. Происходит какое-то событие, мы берем пользователя, добавляем в счетчик плюс один. Таким образом у нас растет событие. Вопрос. Будет ли корректно такая мапа работать в многопоточке?
15. Если создать 100 потоков программа будет выполняться быстрее? Поток идет в центробанк запрашивает валюту и заносит в таблицу. Миллион значений. Если создать 5 потоков и 100 потоков. Что быстрее выполнится?
16. Создание потока дорогая операция. Как нам помогает ExecutorService?
17. У многопоточки есть 3 параметра. atomicity, visibility, happens-before. Что из этого нам обеспечивает переменная volatile
18. Предположим поток ничего не выделяет из памяти. Вообще не обращается к Хипу. Этот поток может жить без Стека?
19. Поток который обрабатывает очень большой объекм данных. Поток обращается к данным. Все данные будут закешированы к кеше этого потока?
20. Когда присваиваете значение в переменную это атомарное действие?
21. Если два потока хотят синхронизироваться, какой объект они могут использовать в качестве монитора?
22. Если 10 потоков, которые пришли в synchronize, кто из них первый попадет в Lock
23. Есть потоки. Вы стартуете на каждую задачу либо сделали threadPool или Executor. У вас ограниченное количество потоков. С точки зрения вычислений это более эффективно или просто удобно?
24. Как написать асинхронное приложение. Как одновременно запустить две функции и дождаться их выполнения. Например есть getTotalPrice и getBonusRubbles. Надо вычесть их в конце. Как это сделать?
25. В чем отличие несинхронной обработки запроса и неблокирующей реактивной обработки?
26. Почему в многопоточной среде выполнения из коллекции ArrayList может выброситься ConcurrentModificationException. Как это пофиксить?
27. Если создали в main новый поток и запустили, какой приоритет будет у потока?
28. Пишу код, хочу использовать чужой класс. Мой участок кода будет исполняться многопоточно. Как понять, что чужой класс будет нормально работать в многопоточной среде? Чужой класс - это Registry, там обычная HashMap, в которую что-то складываем, потом что-то достаем
29. Хотим вызвать три метода в параллель, объединить результаты которые они выдадут и вызвать из своего метода? Каждый из методов возвращает Set.
30. Создаем на Spring Initializer простое Spring Boot приложение, добавив в него всего один компонент Web. И создадим один контроллер, в рамках которого создадим один метод. Это приложение будет однопоточным или многопоточным?
31. Как считаете, это безопасно с точки зрения потоков, что дефолтный скоуп Singleton, а кругом многопоточка?
32. Как блокировать поток в многопоточной среде
33. Хотим вызавать три метода в параллель, объединить результаты и вернуть из своего метода. Как такое реализовать?
34. Есть класс Thread, в нем есть статический метод sleep(). В Sleep можем передать временное значение. У каждого объекта в Java есть метод wait(). Чем отличаются эти два метода?
35. Когда выполняли notifyAll и все потоки пробудились, какой поток будет выполняться?
36. Как проверить, что именно 20 потоков прошло через блок кода?
37. Есть класс Desk. Есть якобы AI и пользователь работают параллельно, а IndianAI игрок сидит из Индии и по TCP/IP общается с программой. Как бы реализовал многопоточку в этом случае?
38. Есть метод помеченный synchronized. И есть другой метод в том же классе, в котором критическая секция помечена через Lock объект. Что является монитором в данном случае? Относительно чего синхронизируются?
39. Если я напишу volatile в многопоточном инкременте обычного int, будет ли корректно считаться инкремент?
40. Если указали synchronized в сигнатуре метода, то кто будет там монитором?
41. Запустил CompletableFuture на 10 задач. И запустил Executor на 10 потоков. В чем разница?
42. Есть сервис. На вход ему посылаем потоки. Один сделан на синхронном потоке, другой на асинхронном. У каждого под капотом пул из 10 потоков. Ядер у процессора 10. Каждый запрос выполняется 3 мин. Кинул первый, второй, …, десятый запрос, потом одиннадцатый запрос кидаю, а под капотом всего 10 потоков. Что произойдет с одиннадцатым запросом, если первые десять запросов еще не исполнились?
43. Есть глобально доступный счетчик public static int count = 0. Есть два потока. Каждый поток в цикле из 100 итераций делает инкремент на 1 счетчика count. Потоки запускаются одновременно. Мы дожидаемся их выполнения. Что мы увидим в счетчике count после их отработки?
44. Есть 1000 клиентов. Нужно каждый час проходить и выполнять какую-то работу. Есть вариант распараллелить?
45. У Вас есть два потока, которые считывают данные из заказа. Один поток не справлялся и Вы решили подключить второй. Может получиться, что Вы заказ считали, а он в БД не вставляется. Например, товар еще не подгрузился. Надо к этому заказу потом вернуться, а у Вас два потока работают, нужно как-то переставлять смещение, что считали, а что нет. Как бы Вы это решили?
46. Есть базовый трехзвенный сервис: получить пользователей, в БД все идет. Через RestController идет. Жирный pod на 20 потоков вызывает одни и те же методы, использует одни и те же классы. И в многопоточной среде все отлично работает. Мы не ставим блокировки, не используем многопоточные коллекции. Почему?
47. Как думаешь, будут ли проблемы с многопоточностью, если мы поменяем скоуп бина? Если поставим Prototype или Web Request?
48. Часто бывает, что из БД вычитал набор тасков, они обрабатываются долго, надо это сделать параллельно. Как обычно такое решаешь?
49. Ты пишешь приложение, в котором используется CompletableFuture, которую ты запускаешь и пытаешься прочитать что-то из SecurityContext и как-то обработать. Что будет происходить?
50. Многопоточка, CompletableFuture. Есть наш метод, он выполняет какую-то логику. Мы можем вносить изменения в его реализацию. Главный нюанс: если в метод закинуть много данных, то для обработки он будет потреблять много ресурсов и очень долго выполняться. Мы хотим начать вызывать его в отдельном потоке. Но с нюансом: если за 5 сек ответ, мы больше не хотим ждать его выполнения и больше не хотим потреблять ресурсы на его выполнение. Что нужно сделать?
51. Есть 3 потока, каждый что-то делает и мы сделали счетчик количества операций. В каждом потоке мы хотим этот счетчик инкрементировать. Как это сделать потокобезопасно?
52. Если через семафор: пришел поток, захватил семафор, остальные потоки сидят-курят, в ожидании, когда освободится. То есть в момент инкрементации все потоки стоят, ничего не делают, пока один не сделает. Как бы ты реализовал в таком случае?
53. У нас есть два потока - A и B. В какой-то момент из потока А в поток В каким-то образом нужно передать информацию, что мы заняли ресурс. Как это сделать?
54. У нас есть два потока, они не завершились и что-то делают. Допустим, первый поток ждет второго. Как из второго потока прокинуть в первый сообщение, чтобы его оживить?
55. А если мы хотим ограничить метод несколькими потоками? Например, у нас есть крупный метод, который работает с большой локальной мапой. Нужно, чтобы с ним работало максимум три потока, больше нельзя. Как это реализовать?
56. Соотношение Happens-before. Если мы что-то записали в волатайл переменную, а в другом потоке считали измененное значение, то…? Что будет?
57. Когда мы используем ComplitableFuture у нас подается асинхронная задача. Асинхронная задача должна где-то выполняться. Где выполняется асинхронная задача?
58. Два потока зашли в один метод, при этом в методе не рассчитано, что с ним будут работать параллельно два потока. Что мы получим на выходе?
59. Из-за synchronized мы лишаемся преимуществ многопоточности: потоки стоят в очереди. Как можно решить эту проблему?
60. Пусть ExecutorService создал потоки, мы из пула взяли поток, он выполнил свою задачу. Что с ним дальше происходит?
61. Мы хотим написать самопальный кеш. Не использую готовые решения. Что будем использовать?
62. Взяли кеш и выяснили, что общий кеш нам не нужен. Нам нужен для каждого нового вызова сервиса нам нужно создавать кеш. Что будем делать? У нас есть вызов сервиса. 16 потоков, мы 16 раз вызвали сервис. Для каждого единичного вызова сервиса, нужно сделать так, чтобы создавался новый кеш
63. Есть сервис отправки пушей для клиентов в телефон. Пуши отправляете пакетами по 200 номеров. Хотите чтобы пакеты отправлялись параллельно. Как бы вы это сделали через Compatible Future?
64. Как обрабатывать ошибки в Compatible Future? У вас какие то элементы отправились, а какие то ошбику сделали. N потоков отправки. Какие то успешно, какие то нет. Надо разобраться, какие в этих потоках сообщения отправились, а какие нет. Те которые не отправились, отправить повторно
65. Есть main. В нем мы создаем новый поток, в котором просто в цикле со слипом выводим лог. Есть дочерний поток. Если main процесс завершится, закроется ли дочерний поток?
66. Есть файл, в нем хранятся key-value. Этот словарь в файле неизменен, мы его включили в сборку. Нам нужно этот словарь отдавать потребителям. Как это лучше имплементировать? Чтобы поддерживать многопоточное чтение. Надо отдавать записи по ключу из него. В каких структурах бы хранил? Сделал бы блокировки?
67. Есть HashMap, объявил ее volatile. Я делаю put в нее. Потом следующий поток. Это будет атомарное изменение? Поможет ли volatile в данном случае?
68. Есть мой кастомный поток, connection. Что нужно сделать, чтобы поместить его в try-with-resources?
69. Есть проблема в том, что параллельный стрим берет потоки из пула, которым пользуется весь application?
70. Что случится если параллельный стрим возьмет все потоки из пула?
71. Работаю на одноядерном процессоре. Создавать больше одного потока не имеет смысла? Можно ли создать больше одного потока?
72. У нас большая система. В процессе работы запустился поток и в нем произошел exception. Где мы увидем его? В логах или не увидем? В методе run, try и catch нету.
73. У меня идет процесс и мне нужно получить сигнал от другого потока в течении определенного времени. Какой класс использовать или механизм?
74. Есть функция вычисляющая новое значение на основе предыдущего. Выполнение функции требует больших ресурсов. Вызывается из многопоточного окружения. Что лучше использовать атомарные типы или блоки синхронизации?