![Page 1: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/1.jpg)
1 17-214
PrinciplesofSoftwareConstruction: Objects,Design,andConcurrencyPart3:ConcurrencyIntroductiontoconcurrency,part3Concurrencyprimitives,libraries,anddesignpatternsCharlieGarrodChrisTimperley
![Page 2: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/2.jpg)
2 17-214
Administrivia
• Homework5bdue11:59p.m.Tuesday– TurninbyWednesday9a.m.tobeconsideredasaBestFramework
• Optionalreadingduetoday:– JavaConcurrencyinPractice,Chapter10
![Page 3: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/3.jpg)
3 17-214
KeyconceptsfromTuesday
![Page 4: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/4.jpg)
4 17-214
Avoidingdeadlock
• Thewaits-forgraphrepresentsdependenciesbetweenthreads– Eachnodeinthegraphrepresentsathread– AnedgeT1->T2representsthatthreadT1iswaitingforalockT2owns
• Deadlockhasoccurrediffthewaits-forgraphcontainsacycle• Onewaytoavoiddeadlock:lockingprotocolsthatavoidcycles
ab
c
d
f
e
h
g
i
![Page 5: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/5.jpg)
5 17-214
Encapsulatingthesynchronizationimplementation
publicclassBankAccount{privatelongbalance;privatefinallongid=SerialNumber.generateSerialNumber();privatefinalObjectlock=newObject();publicBankAccount(longbalance){this.balance=balance;}
staticvoidtransferFrom(BankAccountsource,BankAccountdest,longamount){BankAccountfirst=source.id<dest.id?source:dest;BankAccountsecond=first==source?dest:source;synchronized(first.lock){synchronized(second.lock){source.balance-=amount;dest.balance+=amount;}}}…
![Page 6: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/6.jpg)
6 17-214
Anaside:JavaConcurrencyinPracticeannotations
@ThreadSafepublicclassBankAccount{@GuardedBy("lock")privatelongbalance;privatefinallongid=SerialNumber.generateSerialNumber();privatefinalObjectlock=newObject();publicBankAccount(longbalance){this.balance=balance;}
staticvoidtransferFrom(BankAccountsource,BankAccountdest,longamount){BankAccountfirst=source.id<dest.id?source:dest;BankAccountsecond=first==source?dest:source;synchronized(first.lock){synchronized(second.lock){source.balance-=amount;dest.balance+=amount;}…
![Page 7: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/7.jpg)
7 17-214
Anaside:JavaConcurrencyinPracticeannotations
• @ThreadSafe• @NotThreadSafe• @GuardedBy• @Immutable
![Page 8: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/8.jpg)
8 17-214
Today
• Strategiesforsafety• Javalibrariesforconcurrency• Buildingthread-safedatastructures
– Javaprimitivesforconcurrentcoordination
• Programstructureforconcurrency
![Page 9: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/9.jpg)
9 17-214
Policiesforthreadsafety
• Thread-confined• Sharedread-only• Sharedthread-safe
– Objectsthatperforminternalsynchronization
• Guarded– Objectsthatmustbesynchronizedexternally
![Page 10: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/10.jpg)
10 17-214
Stackconfinement
• Primitivelocalvariablesareneversharedbetweenthreads
![Page 11: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/11.jpg)
11 17-214
Threadconfinementwithjava.lang.ThreadLocal<T>
• Sharablevariablethatconfinesstatetoeachthread– LogicallysimilartoaMap<Thread,T>ThreadLocal<T>:Tget();//getsvalueforcurrentthreadvoidset(Tvalue);//setsvalueforcurrentthread
![Page 12: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/12.jpg)
12 17-214
Sharedread-only
• Immutabledataisalwayssafetoshare
![Page 13: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/13.jpg)
13 17-214
Sharedthread-safe
• "Thread-safe"objectsthatperforminternalsynchronization• Buildyourown,orknowtheJavaconcurrencylibraries
![Page 14: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/14.jpg)
14 17-214
java.util.concurrentisBIG(1)
• Atomicvariables:java.util.concurrent.atomic– Supportvariousatomicread-modify-writeops
• Executorframework– Tasks,futures,threadpools,completionservice,etc.
• Locks:java.util.concurrent.locks– Read-writelocks,conditions,etc.
• Synchronizers– Semaphores,cyclicbarriers,countdownlatches,etc.
![Page 15: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/15.jpg)
15 17-214
java.util.concurrentisBIG(2)
• Concurrentcollections– Sharedmaps,sets,lists
• Dataexchangecollections– Blockingqueues,deques,etc.
• Pre-packagedfunctionality:java.util.Arrays– Parallelsort,parallelprefix
![Page 16: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/16.jpg)
16 17-214
Thejava.util.concurrent.atomicpackage
• Concreteclassessupportingatomicoperations,e.g.:– AtomicLong
longget();voidset(longnewValue);longgetAndSet(longnewValue);longgetAndAdd(longdelta);longgetAndIncrement();booleancompareAndSet(longexpectedValue, longnewValue);longgetAndUpdate(LongUnaryOperatorupdateFunction);longupdateAndGet(LongUnaryOperatorupdateFunction);…
![Page 17: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/17.jpg)
17 17-214
AtomicLongexample
publicclassSerialNumber{privatestaticAtomicLongnextSerialNumber=newAtomicLong();publicstaticlonggenerateSerialNumber(){returnnextSerialNumber.getAndIncrement();}}
![Page 18: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/18.jpg)
18 17-214
Overviewofjava.util.concurrent.atomic
• Atomic{Boolean,Integer,Long}– Boxedprimitivesthatcanbeupdatedatomically
• AtomicReference<T>– Objectreferencethatcanbeupdatedatomically
• Atomic{Integer,Long,Reference}Array– Arraywhoseelementsmaybeupdatedatomically
• Atomic{Integer,Long,Reference}FieldUpdater– Reflection-basedutilityenablingatomicupdatestovolatilefields
• LongAdder,DoubleAdder– Highlyconcurrentsums
• LongAccumulator,DoubleAccumulator– Generalizationofaddertoarbitraryfunctions(max,min,etc.)
![Page 19: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/19.jpg)
19 17-214
Concurrentcollections
• Providehighperformanceandscalability
Unsynchronized ConcurrentHashMap ConcurrentHashMapHashSet ConcurrentHashSetTreeMap ConcurrentSkipListMapTreeSet ConcurrentSkipListSet
![Page 20: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/20.jpg)
20 17-214
java.util.concurrent.ConcurrentHashMap
• Implementsjava.util.Map<K,V>– Highconcurrencylockstriping
• Internallyusesmultiplelocks,eachdedicatedtoaregionofhashtable– Externally,canuseConcurrentHashMaplikeanyothermap…
Locks
Hashtable
![Page 21: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/21.jpg)
21 17-214
Atomicread-modify-writemethods
• VputIfAbsent(Kkey,Vvalue);• booleanremove(Objectkey,Objectvalue);• Vreplace(Kkey,Vvalue);• booleanreplace(Kkey,VoldValue,VnewValue);• Vcompute(Kkey,BiFunction<...>remappingFn);• VcomputeIfAbsent(Kkey,Function<...>mappingFn);• VcomputeIfPresent(Kkey,BiFunction<...>remapFn);• Vmerge(Kkey,Vvalue,BiFunction<...>remapFn);
![Page 22: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/22.jpg)
22 17-214
java.util.concurrent.BlockingQueue
• Implementsjava.util.Queue<E>• java.util.concurrent.SynchronousQueue
– Eachputdirectlywaitsforacorrespondingpoll• java.util.concurrent.ArrayBlockingQueue
– put blocksifthequeueisfull– poll blocksifthequeueisempty
![Page 23: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/23.jpg)
23 17-214
The CopyOnWriteArrayList
• Implementsjava.util.List<E>• Allwritestothelistcopythearraystoringthelistelements
![Page 24: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/24.jpg)
24 17-214
Example:addingconcurrencytotheobserverpattern
privatefinalList<Observer<E>>observers=newArrayList<>();publicvoidaddObserver(Observer<E>observer){synchronized(observers){observers.add(observer);}}publicbooleanremoveObserver(Observer<E>observer){synchronized(observers){returnobservers.remove(observer);}}privatevoidnotifyOf(Eelement){synchronized(observers){for(Observer<E>observer:observers)observer.notify(this,element);}}
//Notthreadsafe.Containsasubtlebug.
![Page 25: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/25.jpg)
25 17-214
Example:addingconcurrencytotheobserverpattern
privatefinalList<Observer<E>>observers=newArrayList<>();publicvoidaddObserver(Observer<E>observer){synchronized(observers){observers.add(observer);}}publicbooleanremoveObserver(Observer<E>observer){synchronized(observers){returnobservers.remove(observer);}}privatevoidnotifyOf(Eelement){synchronized(observers){for(Observer<E>observer:observers)observer.notify(this,element);//Riskslivenessand}//safetyfailures!}
![Page 26: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/26.jpg)
26 17-214
Onesolution:snapshotiteration
privatevoidnotifyOf(Eelement){List<Observer<E>>snapshot=null;synchronized(observers){snapshot=newArrayList<>(observers);}for(Observer<E>observer:snapshot){observer.notify(this,element);//Safe}}
![Page 27: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/27.jpg)
27 17-214
Abettersolution:CopyOnWriteArrayList
privatefinalList<Observer<E>>observers=newCopyOnWriteArrayList<>();publicvoidaddObserver(Observer<E>observer){observers.add(observer);}publicbooleanremoveObserver(Observer<E>observer){returnobservers.remove(observer);}privatevoidnotifyOf(Eelement){for(Observer<E>observer:observers)observer.notify(this,element);}
![Page 28: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/28.jpg)
28 17-214
Definingyourownthread-safeobjects
• Identifyvariablesthatrepresenttheobject'sstate• Identifyinvariantsthatconstrainthestatevariables• Establishapolicyformaintaininginvariantswithconcurrent
accesstostate
![Page 29: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/29.jpg)
29 17-214
Policiesforthreadsafety(again)
• Thread-confined• Sharedread-only• Sharedthread-safe
– Objectsthatperforminternalsynchronization
• Guarded– Objectsthatmustbesynchronizedexternally
![Page 30: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/30.jpg)
30 17-214
Atoyexample:Read-writelocks(a.k.a.sharedlocks)
privatefinalRwLocklock=newRwLock();lock.readLock();try{//Dostuffthatrequiresread(shared)lock}finally{lock.unlock();}lock.writeLock();try{//Dostuffthatrequireswrite(exclusive)lock}finally{lock.unlock();}
Sampleclientcode:
![Page 31: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/31.jpg)
31 17-214
Anaside:MoreJavaprimitives,forcoordination
• Goal:guardedsuspensionwithoutspin-waitingvolatilebooleanready=…;while(!ready);//loopuntilready…
• Objectmethodsforcoordination:voidwait();voidwait(longtimeout);voidnotify();voidnotifyAll();
![Page 32: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/32.jpg)
32 17-214
Atoyexample:Read-writelocks(implementation1/2)
@ThreadSafepublicclassRwLock{//StatefieldsareprotectedbyRwLock'sintrinsiclock/**Numthreadsholdinglockforread.*/@GuardedBy("this")privateintnumReaders=0;/**Whetherlockisheldforwrite.*/@GuardedBy("this")privatebooleanwriteLocked=false;publicsynchronizedvoidreadLock()throwsInterruptedException{while(writeLocked){wait();}numReaders++;}
![Page 33: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/33.jpg)
33 17-214
Atoyexample:Read-writelocks(implementation2/2)
publicsynchronizedvoidwriteLock()throwsInterruptedException{while(numReaders!=0||writeLocked){wait();}writeLocked=true;}publicsynchronizedvoidunlock(){if(numReaders>0){numReaders--;}elseif(writeLocked){writeLocked=false;}else{thrownewIllegalStateException("Locknotheld");}notifyAll();//Wakeanywaiters}}
![Page 34: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/34.jpg)
34 17-214
Adviceforbuildingthread-safeobjects
• Doaslittleaspossibleinsynchronizedregion:getin,getout– Obtainlock– Examineshareddata– Transformasnecessary– Dropthelock
• Ifyoumustdosomethingslow,moveitoutsidethesynchronizedregion
![Page 35: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/35.jpg)
35 17-214
Documentation
• Documentaclass'sthreadsafetyguaranteesforitsclients• Documentaclass'ssynchronizationpolicyforitsmaintainers• Use@ThreadSafe,@GuardedByannotations
![Page 36: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/36.jpg)
36 17-214
SummaryofourRwLockexample
• Generally,avoidwait/notify• Neverinvokewaitoutsidealoop
– Mustcheckcoordinationconditionafterwaking
• GenerallyusenotifyAll,notnotify• DonotuseourRwLock–it'sjustatoy
– Instead,knowthestandardlibraries…• Discuss:sun.misc.Unsafe
![Page 37: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/37.jpg)
37 17-214
Today
• Strategiesforsafety• Javalibrariesforconcurrency• Buildingthread-safedatastructures
– Javaprimitivesforconcurrentcoordination
• Programstructureforconcurrency
![Page 38: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/38.jpg)
38 17-214
Producer-consumerdesignpattern
• Goal:Decoupletheproducerandtheconsumerofsomedata• Consequences:
– Removescodedependencybetweenproducersandconsumers– Producersandconsumerscanproduceandconsumeatdifferentrates
![Page 39: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/39.jpg)
39 17-214
java.util.concurrent.BlockingQueue
• Implementsjava.util.Queue<E>• java.util.concurrent.SynchronousQueue
– Eachputdirectlywaitsforacorrespondingpoll• java.util.concurrent.ArrayBlockingQueue
– put blocksifthequeueisfull– poll blocksifthequeueisempty
![Page 40: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/40.jpg)
40 17-214
Thefork-joinpattern
if(myportionoftheworkissmall)dotheworkdirectlyelsesplitmyworkintopiecesinvokethepiecesandwaitfortheresults
Image from: Wikipedia
![Page 41: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/41.jpg)
41 17-214
Themembranepattern
• Multipleroundsoffork-join,eachroundwaitingforthepreviousroundtocomplete
Image from: Wikipedia
![Page 42: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/42.jpg)
42 17-214
Executionoftasks
• Naturalboundariesofcomputationdefinetasks,e.g.:publicclassSingleThreadWebServer{publicstaticvoidmain(String[]args)throwsIOException{ServerSocketsocket=newServerSocket(80);while(true){Socketconnection=socket.accept();handleRequest(connection);}}privatestaticvoidhandleRequest(Socketconnection){…//request-handlinglogichere}}
![Page 43: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/43.jpg)
43 17-214
Apoordesignchoice:Athreadpertask
publicclassThreadPerRequestWebServer{publicstaticvoidmain(String[]args)throwsIOException{ServerSocketsocket=newServerSocket(80);while(true){Socketconnection=socket.accept();newThread(()->handleRequest(connection)).start();}}privatestaticvoidhandleRequest(Socketconnection){…//request-handlinglogichere}}
![Page 44: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/44.jpg)
44 17-214
Thej.u.cexecutorframework
• Keyabstractions– Runnable,Callable<T>:kindsoftasks
• Executor:thingthatexecutestasks• Future<T>:apromisetogiveyouaT• Executorservice:AnExecutorthat
– Letsyoumanagetermination– CanproduceFutureinstances
![Page 45: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/45.jpg)
45 17-214
Aframeworkforasynchronouscomputation
• Thejava.util.concurrent.Future<V>interfaceVget();Vget(longtimeout,TimeUnitunit);booleanisDone();booleancancel(booleanmayInterruptIfRunning);booleanisCancelled();
![Page 46: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/46.jpg)
46 17-214
Aframeworkforasynchronouscomputation
• Thejava.util.concurrent.Future<V>interfaceVget();Vget(longtimeout,TimeUnitunit);booleanisDone();booleancancel(booleanmayInterruptIfRunning);booleanisCancelled();
• Thejava.util.concurrent.ExecutorServiceinterfacevoidexecute(Runnabletask);Futuresubmit(Runnabletask);Future<V>submit(Callable<V>task);List<Future<V>>invokeAll(Collection<Callable<V>>tasks);Future<V>invokeAny(Collection<Callable<V>>tasks);
![Page 47: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/47.jpg)
47 17-214
Executorsforcommoncomputationalpatterns
• Fromthejava.util.concurrent.ExecutorsclassstaticExecutorServicenewSingleThreadExecutor();staticExecutorServicenewFixedThreadPool(intn);staticExecutorServicenewCachedThreadPool();staticExecutorServicenewScheduledThreadPool(intn);
![Page 48: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/48.jpg)
48 17-214
Exampleuseofexecutorservice
publicclassThreadPoolWebServer{privatestaticfinalExecutorexec=Executors.newFixedThreadPool(100);//100threadspublicstaticvoidmain(String[]args)throwsIOException{ServerSocketsocket=newServerSocket(80);while(true){Socketconnection=socket.accept();exec.execute(()->handleRequest(connection));}}privatestaticvoidhandleRequest(Socketconnection){…//request-handlinglogichere}}
![Page 49: Charlie Garrod Chris Timperleycharlie/courses/17-214/... · 11/7/2019 · 17-214 2 Administrivia • Homework 5b due 11:59 p.m. Tuesday – Turn in by Wednesday 9 a.m. to be considered](https://reader033.vdocuments.site/reader033/viewer/2022050522/5fa5a0c444ecf844063c21a1/html5/thumbnails/49.jpg)
49 17-214
Summary
• Reuse,don'tbuild:knowthej.u.c.libraries• Usecommonpatternsforprogramstructure
– Decomposeworkintoindependenttasks