overview of java synchronizer classes · •we cover java language features & library classes...

31
Overview of Java Synchronizer Classes Douglas C. Schmidt [email protected] www.dre.vanderbilt.edu/~schmidt Institute for Software Integrated Systems Vanderbilt University Nashville, Tennessee, USA

Upload: others

Post on 04-Oct-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

Overview of Java

Synchronizer Classes

Douglas C. [email protected]

www.dre.vanderbilt.edu/~schmidt

Institute for Software

Integrated Systems

Vanderbilt University

Nashville, Tennessee, USA

Page 2: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

2

Learning Objectives in this Lesson• Know the key synchronizers

defined in the Java class libraryJava Class Purpose

ReentrantLock A reentrant mutual exclusion lock that extends the built-in monitor lock capabilities

ReentrantReadWriteLock

Improves performance when resources are read much more often than written

StampedLock A readers-writer lock that’s more efficient than ReentrantReadWriteLock

Semaphore Maintains permits that controls thread access to limited # of shared resources

ConditionObject Allows Thread to block until a condition becomes true

CountDownLatch

Allows one or more threads to wait until a set of operations being performed in other threads complete

CyclicBarrier Allows a set of threads to all wait for each other to reach a common barrier point

Phaser A more flexible reusable synchronization barrier

Page 3: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

3

Learning Objectives in this Lesson• Know the key synchronizers

defined in the Java class library

• Recognize synchronizer usageconsiderations

Performance Productivity

Page 4: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

4

Overview of Java Synchronizer Classes

Page 5: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

5

• The java.util.concurrent & java.util.concurrent.locks packages define manysynchronizers

• e.g., java.util.concurrent &java.util.concurrent.locks

See developer.android.com/reference/java/util/concurrent/package-summary.html

Overview of Java Synchronizer Classes

Page 6: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

6

• We cover Java language features & library classes for synchronization

Java Class Purpose

ReentrantLock A reentrant mutual exclusion lock that extends the built-inmonitor lock capabilities

ReentrantReadWriteLock

Improves performance when resources are read much more often than written

StampedLock A readers-writer lock that’s more efficient than ReentrantReadWriteLock

Semaphore Maintains permits that control thread access to limited # of shared resources

ConditionObject Allows Thread to block until a condition becomes true

CountDownLatch

Allows one or more Threads to wait until a set of operations being performed in other Threads complete

CyclicBarrier

Allows a set of Threads to all wait for each other to reach a common barrier point

Phaser A more flexible reusable synchronization barrier

We show how these features & classes are implemented & used in Java & in practice

Overview of Java Synchronizer Classes

Page 7: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

7

• These synchronizers are used extensively in Java applications & class libraries

Additional Frameworks & Languages

Operating System Kernel

Applications

System Libraries

Java Virtual Machine

Threading & Synchronization Packages

Java

/JN

IC+

+/C

C

Overview of Java Synchronizer Classes

Page 8: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

8

• ReentrantLock

• A mutual exclusion lock that extends built-in monitor lock capabilities

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

Overview of Java Synchronizer Classes

Page 9: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

9

• ReentrantLock

• A mutual exclusion lock that extends built-in monitor lock capabilities

• “Reentrant” means that thethread holding the lock canreacquire it without deadlock

See en.wikipedia.org/wiki/Reentrancy_(computing)

Overview of Java Synchronizer Classes

Page 10: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

10

• ReentrantLock

• A mutual exclusion lock that extends built-in monitor lock capabilities

• “Reentrant” means that thethread holding the lock canreacquire it without deadlock

• Must be “fully bracketed”

• A thread that acquires a lock must be the one to release it

See jasleendailydiary.blogspot.com/2014/06/java-reentrant-lock.html

Overview of Java Synchronizer Classes

Page 11: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

11

• ReentrantReadWriteLock

• Improves performance when resources read more often than written

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

Overview of Java Synchronizer Classes

Page 12: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

12

• ReentrantReadWriteLock

• Improves performance when resources read more often than written

• Has many features

• Both a blessing & a curse..

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

Overview of Java Synchronizer Classes

Page 13: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

13

• StampedLock

• A readers-writer lock that’s more efficient than a ReentrantReadWriteLock

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

Overview of Java Synchronizer Classes

Page 14: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

14

• StampedLock

• A readers-writer lock that’s more efficient than a ReentrantReadWriteLock

• Supports “optimistic” reads

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

Overview of Java Synchronizer Classes

Page 15: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

15

• StampedLock

• A readers-writer lock that’s more efficient than a ReentrantReadWriteLock

• Supports “optimistic” reads

• Also supports “lock upgrading”

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

Overview of Java Synchronizer Classes

Page 16: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

16

• Semaphore

• Maintains permits that control thread access to limited # of shared resources

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html

Overview of Java Synchronizer Classes

Page 17: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

17

• Semaphore

• Maintains permits that control thread access to limited # of shared resources

• Operations need not be fully bracketed..

Overview of Java Synchronizer Classes

Page 18: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

18

• ConditionObject

• Allows a thread to wait untilsome condition become true

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

Overview of Java Synchronizer Classes

Page 19: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

19

• ConditionObject

• Allows a thread to wait untilsome condition become true

• Always used in conjunctionwith a ReentrantLock

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

Overview of Java Synchronizer Classes

Page 20: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

20

• CountDownLatch

• Allows one or more threads to wait on thecompletion of operations in other threads

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html

Overview of Java Synchronizer Classes

Page 21: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

21

• CyclicBarrier

• Allows a set of threads to all wait for eachother to reach a common barrier point

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/CyclicBarrier.html

Overview of Java Synchronizer Classes

Page 22: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

22

• Phaser

• A synchronization barrier that’s more flexible & reusablethan CyclicBarrier& CountDownLatch

See docs.oracle.com/javase/8/docs/api/java/util/concurrent/Phaser.html

Overview of Java Synchronizer Classes

Page 23: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

23

Java Synchronizer Class Usage Considerations

Page 24: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

24

• Choosing between these synchronizers involve understanding various tradeoffs between performance & productivity

Performance Productivity

Java Synchronizer Class Usage Considerations

Page 25: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

25

• Choosing between these synchronizers involve understanding various tradeoffs between performance & productivity

• Some synchronizers (or synchronizermethods) have more overhead

• e.g., spin locks vs. sleep locks vs. hybrid locks

See en.wikipedia.org/wiki/Spinlock & docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html

Java Synchronizer Class Usage Considerations

Page 26: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

26

• Choosing between these synchronizers involve understanding various tradeoffs between performance & productivity

• Some synchronizers (or synchronizermethods) have more overhead

• Some synchronizers are harder to program correctly than others

• e.g., risk of deadlock from non-reentrant locking semantics

See en.wikipedia.org/wiki/Deadlock

Deadlocks are problematic in object-oriented frameworks due to callbacks & complex control flows

Java Synchronizer Class Usage Considerations

Page 27: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

27

• Java synchronizers differ from Java built-in monitor objects

Java Synchronizer Class Usage Considerations

Page 28: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

28

• Java synchronizers differ from Java built-in monitor objects, e.g.

• They are largely written in Java rather than C/C++

Java Synchronizer Class Usage Considerations

Page 29: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

29See mishadoff.com/blog/java-magic

-part-4-sun-dot-misc-dot-unsafe

• Java synchronizers differ from Java built-in monitor objects, e.g.

• They are largely written in Java rather than C/C++

• Some low-level methods written in native C/C++

• e.g., compareAndSwapInt(), park(), unpark(), etc.

Java Synchronizer Class Usage Considerations

Page 30: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

30

• Java synchronizers differ from Java built-in monitor objects, e.g.

• They are largely written in Java rather than C/C++

• They provide many more features& have more powerful semantics

Java Synchronizer Class Usage Considerations

Page 31: Overview of Java Synchronizer Classes · •We cover Java language features & library classes for synchronization Java Class Purpose ReentrantLock A reentrant mutual exclusion lock

31

End of Overview of Java Synchronizer Classes