Почему невозможно встроить Runnable в поток?

Насколько я понимаю изjava.lang.Threaddocs и из других вопросов, размещенных здесь в stackoverflow, таких как «Как получить доступ к объекту Runnable с помощью Thread? » и «Получить текущий экземпляр Runnable » это невозможно чтобы получить ссылку на объект Runnable, встроенный в Thread.

Сценарий, в котором наличие такой возможности было бы полезно, — это реализация метода, сигнатура которого не может быть изменена, поскольку мы переопределяем метод, определенный в другом классе или интерфейсе, и в зависимости от типа требуются различные операции. из Runnable, встроенных в текущий Thread.

Если бы у нас был, например, метод с именем getRunnableв классе Thread, мы могли бы сделать что-то вроде этого:

if (Thread.currentThread().getRunnable() instanceof Type1) {
  // do something...
} else {
  // do something else...
}

Это также может быть полезно в ситуациях, когда мы хотим убедиться, операции, содержащиеся в методе, выполняются только определенными потоками, а не другими.

Итак, мне интересно, есть ли конкретная причина, по которой разработчики Java решили не разрешать получение экземпляра Runnableиз Thread, или это недостающая функция, стоящая быть уведомленным? Если вы считаете, что за этим выбором нет никакой причины, но не стоит уведомлять об этом как об отсутствующей функции, какую стратегию вы бы использовали в описанном выше сценарии?

5
задан Community 23 May 2017 в 12:17
поделиться