Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Programs

...

are

...

forbidden

...

to

...

lock

...

on

...

an

...

object

...

of

...

a

...

class

...

that

...

implements

...

either

...

or

...

both

...

of

...

the

...

Lock

...

and

...

Condition

...

interfaces

...

of

...

the

...

java.util.concurrent.locks

...

package.

...

Using

...

the

...

intrinsic

...

locks

...

of

...

these

...

classes

...

is

...

a

...

questionable

...

practice

...

even

...

in

...

cases

...

where

...

the

...

code

...

may

...

appear

...

to

...

function

...

correctly.

...

This

...

problem

...

generally

...

arises

...

when

...

code

...

is

...

refactored

...

from

...

intrinsic

...

locking

...

to

...

the

...

java.util.concurrent

...

dynamic-locking

...

utilities.

...

Noncompliant

...

Code

...

Example

...

(

...

ReentrantLock

...

Lock

...

Object)

...

The

...

doSomething()

...

method

...

in

...

this

...

noncompliant

...

code

...

example

...

synchronizes

...

on

...

the

...

intrinsic

...

lock

...

of

...

an

...

instance

...

of

...

ReentrantLock

...

rather

...

than

...

on

...

the

...

reentrant

...

mutual

...

exclusion

...

Lock

...

encapsulated

...

by

...

ReentrantLock

...

.

{:=
Code Block
bgColor
#FFcccc
}
private final Lock lock = new ReentrantLock();

public void doSomething() {
  synchronized(lock) {
    // ...
  }
}
{code}


h2. Compliant Solution ({{

Compliant Solution (lock()

...

and

...

unlock()

...

)

...

This

...

compliant

...

solution

...

uses

...

the

...

lock()

...

and

...

unlock()

...

methods

...

provided

...

by

...

the

...

Lock

...

interface.

{:=
Code Block
bgColor
#ccccff
}
private final Lock lock = new ReentrantLock();

public void doSomething() {
  lock.lock();
  try {
    // ...
  } finally {
    lock.unlock();
  }
}
{code}

In

...

the

...

absence

...

of

...

a

...

requirement

...

for

...

the

...

advanced

...

functionality

...

of

...

the

...

java.util.concurrent

...

package's

...

dynamic-locking

...

utilities,

...

it

...

is

...

better

...

to

...

use

...

the

...

Executor

...

framework

...

or

...

other

...

concurrency

...

primitives

...

such

...

as

...

synchronization

...

and

...

atomic

...

classes.

...

Risk

...

Assessment

...

Synchronizing

...

on

...

the

...

intrinsic

...

lock

...

of

...

high-level

...

concurrency

...

utilities

...

can

...

cause

...

nondeterministic

...

behavior

...

because

...

the

...

class

...

can

...

end

...

up

...

with

...

two

...

different

...

locking

...

policies.

...

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

LCK03-J

medium

probable

medium

P8

L2

Bibliography

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="fdb6d399-44cd-440c-884b-f43efe93c30d"><ac:plain-text-body><![CDATA[

[[API 2006

AA. Bibliography#API 06]]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="2c0faf2c-5bf1-4d30-b716-cccba3e2eb48"><ac:plain-text-body><![CDATA[

[[Findbugs 2008

AA. Bibliography#Findbugs 08]]

 

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="28b668bc-2949-4084-a17c-66c3ba7cb8e8"><ac:plain-text-body><![CDATA[

[[Pugh 2008

AA. Bibliography#Pugh 08]]

"Synchronization"

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="f11c566a-d17f-4eb5-8bac-3332324a7608"><ac:plain-text-body><![CDATA[

[[Miller 2009

AA. Bibliography#Miller 09]]

Locking

]]></ac:plain-text-body></ac:structured-macro>

<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="107834c0-d4ce-4d0f-84d5-b4fbbe491c4c"><ac:plain-text-body><![CDATA[

[[Tutorials 2008

AA. Bibliography#Tutorials 08]]

[Wrapper Implementations

http://java.sun.com/docs/books/tutorial/collections/implementations/wrapper.html

...

]

]]></ac:plain-text-body></ac:structured-macro>

...

Image Added      08. Locking (LCK)      Image Added