Что такое Executor?
Executor — это интерфейс, который позволяет запускать задачи асинхронно. Используется вместе с интерфейсами Callable и Future для асинхронного выполнения задач.
Он определяет единственный метод execute(), который принимает объект Runnable с задачей для выполнения.
Интерфейс позволяет отделить логику создания и запуска потоков от самих задач.
Потоки создаются заранее и хранятся в пуле, а задачи просто отправляются на выполнение через execute().
Это дает выигрыш в производительности, т. к. исключает накладные расходы на создание новых потоков.
#вопросы_с_собеседований
Executor — это интерфейс, который позволяет запускать задачи асинхронно. Используется вместе с интерфейсами Callable и Future для асинхронного выполнения задач.
Он определяет единственный метод execute(), который принимает объект Runnable с задачей для выполнения.
Интерфейс позволяет отделить логику создания и запуска потоков от самих задач.
Потоки создаются заранее и хранятся в пуле, а задачи просто отправляются на выполнение через execute().
Это дает выигрыш в производительности, т. к. исключает накладные расходы на создание новых потоков.
#вопросы_с_собеседований
👍13
Можно ли синхронизировать доступ к строке?
Хотя строки неизменяемы, то есть их содержимое нельзя изменить после создания, они могут использоваться из разных потоков.
Чтобы избежать race condition, когда два потока одновременно читают/записывают одну строку, можно использовать синхронизацию.
Для этого есть несколько способов:
— Объявить методы класса, которые работают со строкой, как synchronized.
— Использовать блок synchronized при работе со строкой.
— Использовать какой-либо lock (например ReentrantLock) для синхронизации доступа к строке.
— Использовать классы из java.util.concurrent для работы со строками, например StringBuffer.
#вопросы_с_собеседований
Хотя строки неизменяемы, то есть их содержимое нельзя изменить после создания, они могут использоваться из разных потоков.
Чтобы избежать race condition, когда два потока одновременно читают/записывают одну строку, можно использовать синхронизацию.
Для этого есть несколько способов:
— Объявить методы класса, которые работают со строкой, как synchronized.
— Использовать блок synchronized при работе со строкой.
— Использовать какой-либо lock (например ReentrantLock) для синхронизации доступа к строке.
— Использовать классы из java.util.concurrent для работы со строками, например StringBuffer.
#вопросы_с_собеседований
👍7🤔1
Могут ли нестатические методы перегрузить статические?
Да, нестатические методы могут перегружать статические. Причина в том, что статические и нестатические методы считаются независимыми сущностями.
Статические методы привязаны к классу, а нестатические — к объекту/экземпляру класса. Поэтому они имеют разную сигнатуру вызова.
Статический метод вызывается через имя класса, а нестатический — через объект класса.
Таким образом, в одном классе могут быть определены статический и нестатический методы с одинаковым именем и списком параметров.
#вопросы_с_собеседований
Да, нестатические методы могут перегружать статические. Причина в том, что статические и нестатические методы считаются независимыми сущностями.
Статические методы привязаны к классу, а нестатические — к объекту/экземпляру класса. Поэтому они имеют разную сигнатуру вызова.
Статический метод вызывается через имя класса, а нестатический — через объект класса.
Таким образом, в одном классе могут быть определены статический и нестатический методы с одинаковым именем и списком параметров.
#вопросы_с_собеседований
👍8🤯2🔥1