С выпуском Java 8 теперь есть третий вариант.
Runnable
- функциональный интерфейс , что означает, что его экземпляры могут быть созданы с помощью лямбда выражения или ссылки на методы.
Ваш пример может быть заменен на:
new Thread(() -> { /* Code here */ }).start()
или если вы хотите использовать ExecutorService
и ссылку на метод:
executor.execute(runner::run)
Они не только намного короче, чем ваши примеры, но также обладают многими преимуществами, изложенными в других ответах на использование Runnable
по сравнению с Thread
, например, с одной ответственностью и использованием композиции, потому что вы не специализируетесь на Поведение потока. Этот способ также позволяет избежать создания дополнительного класса, если все, что вам нужно, это Runnable
, как и в ваших примерах.
Возможно, что-то подобное будет работать:
#ifdef PORTA
#define ADDRESS (*(PORT_t *) 0x0400)
#define EXP_GPIO0_PORT ADDRESS
#define EXP_GPIO0_PIN 0
#endif
const uint8_t PortAGpiosPortpinUsed[] =
{
#ifdef PORTA
EXP_GPIO0_PIN,
#endif
}
Конечно, это предполагает, что PORTA
определено ранее