rspec/rules/S2236/java/rule.adoc

40 lines
1.2 KiB
Plaintext

== Why is this an issue?
In Java, the `Thread` class represents a thread of execution.
Synchronization between threads is typically achieved using objects or shared resources.
The methods `wait(...)`, `notify()`, and `notifyAll()` are related to the underlying object's monitor
and are designed to be called on objects that act as locks or monitors for synchronization.
These methods are available on Java `Object` and, therefore, automatically inherited by all objects, including `Thread.`
Calling these methods on a `Thread` may corrupt the behavior of the JVM, which relies on them to change the state
of the thread (`BLOCKED,` `WAITING,`...).
=== Noncompliant code example
[source,java]
----
Thread myThread = new Thread(new RunnableJob());
...
myThread.wait(); // Noncompliant
----
== Resources
* https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/Thread.html[Oracle Java SE - Thread]
* https://docs.oracle.com/en/java/javase/20/docs/api/java.base/java/lang/Object.html[Oracle Java SE - Object]
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
Refactor the synchronisation mechanism to not use a Thread instance as a monitor.
endif::env-github,rspecator-view[]