Многопоточность

Многопоточность #


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. Если через семафор: пришел поток, захватил семафор, остальные потоки сидят-курят, в ожидании, когда освободится. То есть в момент инкрементации все потоки стоят, ничего не делают, пока один не сделает. Как бы ты реализовал в таком случае? #