![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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022053023/6052f02adca1c6386720dd01/html5/thumbnails/15.jpg)
15
End of Java ConditionObject:Common Use Cases