Törpetestű
Törpetestű

Reputation: 202

ReentrantLock fairness parameter

This question is full theoretical, I'm sorry but I cannot avoid this time. I'm learning about ReentrantLock and read this:

Note however, that fairness of locks does not guarantee fairness of thread scheduling.

What does this mean? How can I imagine this?

Let's suppose that the lock is not held by anyone right now:

  1. thread scheduler wakes up t1 thread (who is not the longest waiting thread)
  2. t1 tries to acquire the lock
  3. lock rejects t1 because t1 is not the longest waiting thread
  4. t1 goes to sleep
  5. thread scheduler wakes up a thread

Does Java work this way? In a very unsuccesful case this would mean lots of context switching (that leads to poor throughput, that is written down in the documentation).

Upvotes: 3

Views: 2991

Answers (2)

Akki
Akki

Reputation: 122

What does this mean?

This means that a thread holding lock may continue holding the lock as long as it wants and can reacquire the same lock many time in succession and the longest waiting thread will keep waiting until current thread releases the lock.

So, fairness guarantee comes to play only when lock is free and java thread scheduler has to decide which thread the lock should be given to. And it is given to longest waiting thread(in case of synchronized, it's random).

It also means that the thread holding the lock is not being scheduled frequently and other threads are given more CPU time, so this thread is not able to complete and thus not releasing the lock.

Upvotes: 3

Peter Lawrey
Peter Lawrey

Reputation: 533492

What does this mean?

The OS will schedule the thread to run whenever it likes.

How can I imagine this?

The OS has little idea what the JVM would like to run next.

Does Java work this way?

Yes, Java doesn't control the OS scheduler.

Upvotes: 5

Related Questions