Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
bgColor#ccccff
public void sampleRunTest() {

  Thread thread = new Thread(new Runnable() {
      @Override public void run() {
        // ...
      }
    });
  
  ((Runnable) thread).run();  // THI00-J-EX0: Does not start a new thread

}

...

Failure to start threads correctly can cause unexpected behavior.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

THI00-J

Low

Probable

Medium

P4

L3

Automated Detection

Automated detection of direct invocations of Thread.run() methods is straightforward. Sound automated determination of which specific invocations are permitted may be infeasible. Heuristic approaches may be useful.

Implemented
Tool
Version
Checker
Description
CodeSonar

Include Page
CodeSonar_V
CodeSonar_V

JAVA.CONCURRENCY.LOCK.SCTBSynchronous Call to Thread Body (Java)
Coverity7.5DC.THREADING.thread_runImplemented
Parasoft Jtest
9.5TRS.IRUN
Include Page
Parasoft_V
Parasoft_V
CERT.THI00.IRUNDo not call the 'run()' method directly on classes extending 'java.lang.Thread' or implementing 'java.lang.Runnable'
PVS-Studio

Include Page
PVS-Studio_V
PVS-Studio_V

V6064
SonarQube
Include Page
SonarQube_V
SonarQube_V
S1217Thread.run() should not be called directly

Related Guidelines

MITRE CWE

CWE-572, Call to Thread run() instead of start()

Android Implementation Details

Android provides a couple of solutions for threading. The Android Developers Blog's article "Painless Threading" discusses those solutions.

Bibliography

...


...