charlie garrod chris timperleycharlie/courses/17-214/... · 11/7/2019  · 17-214 2 administrivia...

49
1 17-214 Principles of Software Construction: Objects, Design, and Concurrency Part 3: Concurrency Introduction to concurrency, part 3 Concurrency primitives, libraries, and design patterns Charlie Garrod Chris Timperley

Upload: others

Post on 10-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

49 17-214

Summary

•  Reuse,don'tbuild:knowthej.u.c.libraries•  Usecommonpatternsforprogramstructure

–  Decomposeworkintoindependenttasks