+ All Categories
Home > Documents > Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… ·...

Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… ·...

Date post: 16-Oct-2020
Category:
Upload: others
View: 9 times
Download: 0 times
Share this document with a friend
15
Java ConditionObject: Common Use Cases Douglas C. Schmidt [email protected] www.dre.vanderbilt.edu/~schmidt Institute for Software Integrated Systems Vanderbilt University Nashville, Tennessee, USA
Transcript
Page 1: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

Java ConditionObject:

Common Use Cases

Douglas C. [email protected]

www.dre.vanderbilt.edu/~schmidt

Institute for Software

Integrated Systems

Vanderbilt University

Nashville, Tennessee, USA

Page 2: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

2

• Understand what condition variables are

• Note a human known use of condition variables

• Know what pattern they implement

• Recognize common use cases where condition variables are applied

Learning Objectives in this Part of the Lesson

Page 3: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

3

Applying Condition Variables in Practice

Page 4: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

4

• CVs are powerful, but can be hard to grok & apply correctly

Applying Condition Variables in Practice

See en.wikipedia.org/wiki/Grok

Page 5: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

5

• CVs are powerful, but can be hard to grok & apply correctly, e.g.

• The protocol for usingCVs involves several“moving parts”

Applying Condition Variables in Practice

Page 6: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

6

• CVs are powerful, but can be hard to grok & apply correctly, e.g.

• The protocol for usingCVs involves several“moving parts”

• i.e., a conditionvariable & a lock

Applying Condition Variables in Practice

Page 7: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

7

• CVs are powerful, but can be hard to grok & apply correctly, e.g.

• The protocol for usingCVs involves several“moving parts”

• The non-determinism of concurrency is tricky

Applying Condition Variables in Practice

See en.wikipedia.org/wiki/Nondeterministic_algorithm

Page 8: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

8

• CVs are powerful, but can be hard to grok & apply correctly, e.g.

• The protocol for usingCVs involves several“moving parts”

• The non-determinism of concurrency is tricky

• i.e., a loop may be needed to ensure aresource is available

Applying Condition Variables in Practice

See stackoverflow.com/a/38313778

Page 9: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

9

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

Applying Condition Variables in Practice

Page 10: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

10

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

• CVs form the basis for higher-level synchronizers in Java

Applying Condition Variables in Practice

Additional Frameworks & Languages

Operating System Kernel

System Libraries

Java Virtual Machine

Threading & Synchronization Packages

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html

Page 11: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

11

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

• CVs form the basis for higher-level synchronizers in Java, e.g.

• Blocking queues & deques in java.util.concurrent* packages

Applying Condition Variables in Practice

See docs.oracle.com/javase/tutorial/collections/implementations/queue.html

Page 12: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

12

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

• CVs form the basis for higher-level synchronizers in Java, e.g.

• Blocking queues & deques in java.util.concurrent* packages

• e.g., ArrayBlockingQueue

usesuses2

ArrayBlocking

Queue

put()take()

ReentrantLock

lock()unlock()

uses

take() put()

Consumer Producer

ConditionObject

await()signal()signalAll()

Applying Condition Variables in Practice

See upcoming discussion in “Java ConditionObject: Example Application”

Page 13: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

13See upcoming lesson on “Java Built-in Monitor Objects”

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

• CVs form the basis for higher-level synchronizers in Java, e.g.

• Blocking queues & deques in java.util.concurrent* packages

• Java built-in monitor objects

Applying Condition Variables in Practice

Page 14: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

14

• CVs are therefore often not used directly by apps, but instead are “hidden” within other abstractions

• CVs form the basis for higher-level synchronizers in Java, e.g.

• Blocking queues & deques in java.util.concurrent* packages

• Java built-in monitor objects

• The Monitor Object pattern

See www.dre.vanderbilt.edu/~schmidt/PDF/monitor.pdf

Applying Condition Variables in Practice

Page 15: Java ConditionObject: Common Use Casesschmidt/cs891s/2020-PDFs/6.2.3-Java-Con… · java.util.concurrent* packages •Java built-in monitor objects Applying Condition Variables in

15

End of Java ConditionObject:Common Use Cases


Recommended