В моем случае поток, выполняющий отмену, отличается от потока, который регистрирует канал для выбора.Кажется, это исключение происходит, когда ключ отменяется первым, а затем другой поток снова регистрирует ключ без промежуточного выбора.Поэтому я решил это, просто сделав фиктивный выбор перед тем, как снова зарегистрировать канал для выбора.Похоже, что в системе выбора выполняется некоторая бухгалтерия, которая необходима для успешной регистрации.Оба потока используют синхронизированные блоки (всего 3) для общего статического объекта для блокировки регистрации, отмены и выбора действия соответственно.