Недавно я обнаружил, что использовал некоторые ExecutorServices (SingleThreadScheduledExecutor и newFixedThreadPool), но у меня нет никакого хорошего имени для них.
Существуют ли какие-либо рекомендации или соглашения об именах этих объектов? Я видел такие имена, как "workerThread", используемые для SingleThreadScheduledExecutors, верно ли это, поскольку они не являются точно потоками?
Хотя это в основном основано на мнениях, я использую следующие условные обозначения в своем коде:
Executor
или ExecutorService
, называется executor
или executorService
. Тип исполнителя не должен быть выведен по имени поля, так как иначе вы не можете легко изменить реализацию исполнителя впоследствии.Runnable
или Callable
для реализации долговременной операции, обычно получает Task
суффикса (например, LoadTask
, ComputationTask
,...). (Поскольку такая операция не является потоком, а выполняется потоком, и обычно нет сопоставления 1:1 между потоками и операциями, неправильно называть его потоком).Это делает код действительно удобочитаемым, и он не делает никаких предположений об использовании потоков, например:
for (String fileName : fileNames) {
executor.execute(new LoadTask(fileName));
}
(В этом примере могут выполняться все задачи загрузки последовательно, параллельно или что-либо между ними - в зависимости от типа используемого исполнителя).
Одна заметка о слове "поток":
Нить слова нигде не используется, кроме редкого случая, когда я должен либо подкласса из Thread
либо создать поле, которое ссылается на (реальную) Thread
:
public class WorkerThread extends Thread { ... }
или:
Thread thread = Thread.currentThread();
Этот вопрос схож, он может помочь вам.
Вы всегда можете построить строку, используя общее имя объекта + PID + что-то еще и хэш результат. Шансы столкновения хэшей довольно низки...