Какое из следующих утверждений о потоках неверно?

1037
  1. Если метод start() вызывается дважды для одного и того же объекта Thread, во время выполнения генерируется исключение.
  2. Порядок, в котором запускались потоки, может не совпадать с порядком их фактического выполнения.
  3. Если метод run() вызывается напрямую для объекта Thread, во время выполнения генерируется исключение.
  4. Если метод sleep() вызывается для потока, во время выполнения синхронизированного кода, блокировка не снимается.

Правильный ответ: 3. Если метод run() вызывается напрямую для объекта Thread, во время выполнения исключение не генерируется. Однако, код, написанный в методе run() будет выполняться текущим, а не новым потоком. Таким образом, правильный способ запустить поток – это вызов метода start(), который приводит к выполнению метода run() новым потоком.

Вызов метода start() дважды для одного и того же объекта Thread приведёт к генерированию исключения IllegalThreadStateException во время выполнения, следовательно, утверждение 1 верно. Утверждение 2 верно, так как порядок, в котором выполняются потоки, определяется Планировщиком потоков, независимо от того, какой поток запущен первым. Утверждение 4 верно, так как поток не освободит блокировки, которые он держит, когда он переходит в состояние Ожидания.