Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Parasoft Jtest 2021.1

...

When used securely, the signal() method has better performance than signalAll().

When notify() or signal() is used to waken a waiting thread, and the thread is not prepared to resume execution, it often resumes waiting. Consequently, no thread wakens, which may cause the system to hang.

Noncompliant Code Example (notify())

...

Notifying a single thread rather than all waiting threads can violate the liveness property of the system.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

THI02-J

Low

Unlikely

Medium

P2

L3

Automated Detection

ToolVersionCheckerDescription
CodeSonar4.2PMD.Design.UseNotifyAllInsteadOfNotify
FB.MT_CORRECTNESS.NO_NOTIFY_NOT_NOTIFYALL
Use notifyAll instead of notify
Using notify() rather than notifyAll()Parasoft Jtest9.5TRS.ANFImplementedSonarQube Java Plugin Include PageSonarQube Java Plugin_VSonarQube Java Plugin_VS2446Implemented
Parasoft Jtest
Include Page
Parasoft_V
Parasoft_V
CERT.THI02.ANFDo not use 'notify()'; use 'notifyAll()' instead so that all waiting threads will be notified
SonarQube
Include Page
SonarQube_V
SonarQube_V
S2446"notifyAll" should be used

Related Guidelines

Bibliography

[API 2006]

Interface java.util.concurrent.locks.Condition

[Bloch 2001]

Item 50, "Never Invoke wait Outside a Loop"

[Goetz 2006]

Section 14.2.4, "Notification"

[JLS 2015]

Chapter 17, "Threads and Locks"

...


...

Image Modified Image Modified Image Modified