...
| Code Block | ||
|---|---|---|
| ||
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 |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
THI00-J | Low | Probable |
Yes | Yes |
P6 |
L2 |
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 | ||||||
|---|---|---|---|---|---|---|---|---|---|
| CodeSonar |
| JAVA.CONCURRENCY.LOCK.SCTB | Synchronous Call to Thread Body (Java) | ||||||
| Coverity | 7.5 | DC.THREADING.thread_run | Implemented | ||||||
| Klocwork |
| JD.THREAD.RUN | |||||||
| Parasoft Jtest |
| CERT.THI00.IRUN | Do not call the 'run()' method directly on classes extending 'java.lang.Thread' or implementing 'java.lang.Runnable' | |||||||
| PVS-Studio |
| V6064 | |||||||
| SonarQube |
| S1217 | Thread.run() should not be called directly |
Related Guidelines
Android Implementation Details
Android provides a couple of solutions for threading. The Android Developers Blog's article "Painless Threading" discusses those solutions.
Bibliography
...
...