# V6064. Suspicious invocation of Thread.run().

Анализатор обнаружил подозрительный прямой вызов Thread.run(). Такой запуск потока может ввести в заблуждение. Когда метод run() объекта Thread вызывается напрямую, все действия в методе run() будут выполняться в текущем потоке, а не вновь созданном.

Рассмотрим некорректный вариант:

    private class Foo implements Runnable
    {
      @Override
      public void run() {/*...*/}
    }

    ....

    Foo foo = new Foo();
    new Thread(foo).run();
    ....

В данном примере выполнение тела метода run() будет в текущем потоке. Так ли задумывалось? Для того, чтобы тело метод run() выполнилось в новом потоке, необходимо использовать метод start().

Корректный вариант:

    private class Foo implements Runnable
    {
      @Override
      public void run() {/*...*/}
    }

    ....

    Foo foo = new Foo();
    new Thread(foo).start();
    ....

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.).

Данная диагностика классифицируется как:

CWE-572 CERT-THI00-J