40 lines
1.2 KiB
Plaintext
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[]
|