2023-05-03 11:06:20 +02:00
== Why is this an issue?
2021-04-28 16:49:39 +02:00
Synchronizing at the method, rather than the block level could lead to problems when maintenance adds code to the method, perhaps inadvertently synchronizing it as well. Instead, synchronization should be applied to the smallest feasible block for optimum performance and maintainability.
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,java]
2021-04-28 16:49:39 +02:00
----
public class MyClass() {
public void synchronized doSomething() { // Noncompliant
// ...
}
}
----
2021-04-28 18:08:03 +02:00
2023-05-03 11:06:20 +02:00
=== Compliant solution
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,java]
2021-04-28 16:49:39 +02:00
----
public class MyClass() {
private Object lockObj = new Object();
public void doSomething() {
synchronized(lockObj) {
// ...
}
}
}
----
2021-04-28 18:08:03 +02:00
2021-06-02 20:44:38 +02:00
2021-06-03 09:05:38 +02:00
ifdef::env-github,rspecator-view[]
2021-09-20 15:38:42 +02:00
'''
== Implementation Specification
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== Message
Move synchronization to the block level
2021-09-20 15:38:42 +02:00
2021-06-08 15:52:13 +02:00
'''
2021-06-02 20:44:38 +02:00
== Comments And Links
(visible only on this page)
2023-05-25 14:18:12 +02:00
=== on 16 Jun 2015, 17:08:08 Nicolas Peru wrote:
Looks good, wondering with overlap or even catch 22 with some other RSPEC about not synchronizing on ``++this++``
=== on 16 Jun 2015, 19:06:00 Ann Campbell wrote:
The closest I'm finding is RSPEC-3067 [~nicolas.peru], and unfortunately "this" seems to be suppressed from JIRA's indexing :-(
If you have a specific RSpec in mind, can you give me another pointer toward it?
2021-06-03 09:05:38 +02:00
endif::env-github,rspecator-view[]