Versions Compared

Key

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

...

This noncompliant code example explicitly invokes run() in the context of the current thread.:

Code Block
bgColor#FFCCCC
public final class Foo implements Runnable {
  @Override public void run() {
    // ...
  }

  public static void main(String[] args) {
    Foo foo = new Foo();
    new Thread(foo).run();
  }
}

...

This compliant solution correctly uses the start() method to tell the Java runtimes runtime to start a new thread.:

Code Block
bgColor#ccccff
public final class Foo implements Runnable {
  @Override public void run() {
    // ...
  }

  public static void main(String[] args) {
    Foo foo = new Foo();
    new Thread(foo).start();
  }
}

...

THI00-EX0: The run() method may be directly invoked during unit testing. Note that this method cannot be used to test a class for multithreaded use.

Given a Thread object that has been was constructed with a runnable argument, when invoking the Thread.run() method, the Thread object may be cast to Runnable to eliminate analyzer diagnostics.:

Code Block
bgColor#ccccff
public void sampleRunTest() {

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

}

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

THI00-J

lowLow

probableProbable

mediumMedium

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.

Tool
Version
Checker
Description
Coverity7.5DC.THREADING.thread_runImplemented

Related Guidelines

MITRE CWE

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

...

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

Bibliography

 

...