Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2...

46
1 17-214 Principles of So3ware Construc9on: Objects, Design, and Concurrency Part 42: Concurrency Introduc9on to concurrency Josh Bloch Charlie Garrod Darya Melicher

Transcript of Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2...

Page 1: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

1 17-214

PrinciplesofSo3wareConstruc9on: Objects,Design,andConcurrencyPart42:ConcurrencyIntroduc9ontoconcurrencyJoshBlochCharlieGarrodDaryaMelicher

Page 2: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

2 17-214

Administrivia

•  Homework5teamsign-updeadlinetonight•  Teamsizes,presenta9onslots,…

–  MidtermexaminclassThursday(November1st)•  Reviewsessiontoday7-9p.m.PorterHall100

–  NextrequiredreadingdueTuesday•  JavaConcurrencyinPrac9ce,Sec9ons11.3and11.4

–  Homework5frameworksdiscussion

Page 3: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

3 17-214

Today

•  Somepuzzlers•  APIdesignconclusions•  Introduc9ontoconcurrency

Page 4: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

4 17-214

1.“TimeforaChange” (2002)

Ifyoupay$2.00foragasketthatcosts$1.10,howmuchchangedoyouget? publicclassChange{publicstaticvoidmain(Stringargs[]){System.out.println(2.00-1.10);}}

From An Evening Of Puzzlers by Josh Bloch

Page 5: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

5 17-214

Whatdoesitprint?

(a) 0.9 (b) 0.90 (c) It varies (d) None of the above

publicclassChange{publicstaticvoidmain(Stringargs[]){System.out.println(2.00-1.10);}}

Page 6: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

6 17-214

(a)0.9(b)0.90(c)Itvaries(d)Noneoftheabove:0.8999999999999999 Decimalvaluescan'tberepresentedexactlyby float or double

Whatdoesitprint?

Page 7: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

7 17-214

Anotherlook

publicclassChange{publicstaticvoidmain(Stringargs[]){System.out.println(2.00-1.10);}}

Page 8: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

8 17-214

Howdoyoufixit?

//Youcouldfixitthisway...importjava.math.BigDecimal;publicclassChange{publicstaticvoidmain(Stringargs[]){System.out.println(newBigDecimal("2.00").subtract(newBigDecimal("1.10")));}}

//...oryoucouldfixitthiswaypublicclassChange{publicstaticvoidmain(Stringargs[]){System.out.println(200-110);}}

Prints0.90

Prints90

Page 9: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

9 17-214

Themoral

•  Avoid float and doublewhereexactanswersarerequired–  Forexample,whendealingwithmoney

•  UseBigDecimal,int,orlonginstead

Page 10: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

10 17-214

2.“AChangeisGonnaCome”

Ifyoupay$2.00foragasketthatcosts$1.10,howmuchchangedoyouget? importjava.math.BigDecimal;publicclassChange{publicstaticvoidmain(Stringargs[]){BigDecimalpayment=newBigDecimal(2.00);BigDecimalcost=newBigDecimal(1.10);System.out.println(payment.subtract(cost));}}

Page 11: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

11 17-214

Whatdoesitprint?

importjava.math.BigDecimal;publicclassChange{publicstaticvoidmain(Stringargs[]){BigDecimalpayment=newBigDecimal(2.00);BigDecimalcost=newBigDecimal(1.10);System.out.println(payment.subtract(cost));}}

(a)0.9(b)0.90(c)0.8999999999999999(d)None of the above

Page 12: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

12 17-214

(a)0.9(b)0.90(c)0.8999999999999999(d)Noneoftheabove:0.899999999999999911182158029987476766109466552734375

WeusedthewrongBigDecimalconstructor

Whatdoesitprint?

Page 13: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

13 17-214

Anotherlook

importjava.math.BigDecimal;publicclassChange{publicstaticvoidmain(Stringargs[]){BigDecimalpayment=newBigDecimal(2.00);BigDecimalcost=newBigDecimal(1.10);System.out.println(payment.subtract(cost));}}

Thespecsays: publicBigDecimal(doubleval)TranslatesadoubleintoaBigDecimalwhichistheexactdecimalrepresenta9onofthedouble'sbinaryfloa9ng-pointvalue.

Page 14: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

14 17-214

Howdoyoufixit?

importjava.math.BigDecimal;publicclassChange{publicstaticvoidmain(Stringargs[]){BigDecimalpayment=newBigDecimal("2.00");BigDecimalcost=newBigDecimal("1.10");System.out.println(payment.subtract(cost));}}

Prints0.90

Page 15: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

15 17-214

The moral

•  Use newBigDecimal(String), not newBigDecimal(double)

•  BigDecimal.valueOf(double) is better, but not perfect –  Use it for non-constant values.

•  For API designers –  Make it easy to do the commonly correct thing –  Make it hard to misuse –  Make it possible to do exotic things

Page 16: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

16 17-214

KeyconceptsfromlastThursday

Page 17: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

17 17-214

Keydesignprinciple:Informa9onhiding

•  "Whenindoubt,leaveitout."

Page 18: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

18 17-214

Minimizemutability

•  Classesshouldbeimmutableunlessthere'sagoodreasontodootherwise–  Advantages:simple,thread-safe,reusable

•  Seejava.lang.String–  Disadvantage:separateobjectforeachvalue

•  Mutableobjectsrequirecarefulmanagementofvisibilityandsideeffects–  e.g.Component.getSize()returnsamutableDimension

•  Documentmutability–  Carefullydescribestatespace

Page 19: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

19 17-214

Failfast

•  Reporterrorsassoonastheyaredetectable–  Checkprecondi9onsatthebeginningofeachmethod–  Avoiddynamictypecasts,run-9metype-checking

//APropertiesinstancemapsStringstoStringspublicclassPropertiesextendsHashTable{publicObjectput(Objectkey,Objectvalue);//ThrowsClassCastExceptionifthisinstance//containsanykeysorvaluesthatarenotStringspublicvoidsave(OutputStreamout,Stringcomments);}

Page 20: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

20 17-214

Subtle9esofinforma9onhiding

•  Preventsubtleleaksofimplementa9ondetails–  Documenta9on–  Lackofdocumenta9on–  Implementa9on-specificreturntypes–  Implementa9on-specificexcep9ons–  Outputformats–  implementsSerializable

Page 21: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

21 17-214

Avoidbehaviorthatdemandsspecialprocessing

•  Donotreturnnulltoindicateanemptyvalue–  e.g.,UseanemptyCollectionorarrayinstead

•  Donotreturnnulltoindicateanerror–  Useanexcep9oninstead

Page 22: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

22 17-214

Throwexcep9onsonlyforexcep9onalbehavior

•  Donotforceclienttouseexcep9onsforcontrolflow:privatebyte[]a=newbyte[CHUNK_SIZE];voidprocessBuffer(ByteBufferbuffer){try{while(true){buffer.get(a);…}}catch(BufferUnderflowExceptione){intremaining=buffer.remaining();buffer.get(a,0,remaining);…}}

•  Conversely,don’tfailsilently:ThreadGroup.enumerate(Thread[]list)

Page 23: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

23 17-214

Context:Theexcep9onhierarchyinJava

Throwable

Exception

RuntimeException IOException

EOFException

FileNotFoundException

NullPointerException

IndexOutOfBoundsException

ClassNotFoundException… …

. . .

Object

unchecked checked

Page 24: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

24 17-214

Avoidcheckedexcep9ons,ifpossible

•  Overuseofcheckedexcep9onscausesboilerplatecode:try{

Foof=(Foo)g.clone();}catch(CloneNotSupportedExceptione){//Thisexceptioncan'thappenifFooisCloneablethrownewAssertionError(e);}

Page 25: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

25 17-214

Don'tletyouroutputbecomeyourdefactoAPI

•  Documentthefactthatoutputformatsmayevolveinthefuture•  Provideprogramma9caccesstoalldataavailableinstringform

Page 26: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

26 17-214

Don'tletyouroutputbecomeyourdefactoAPI

•  Documentthefactthatoutputformatsmayevolveinthefuture•  Provideprogramma9caccesstoalldataavailableinstringform

publicclassThrowable{publicvoidprintStackTrace(PrintStreams);publicStackTraceElement[]getStackTrace();//since1.4}publicfinalclassStackTraceElement{publicStringgetFileName();publicintgetLineNumber();publicStringgetClassName();publicStringgetMethodName();publicbooleanisNativeMethod();}

Page 27: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

27 17-214

APIdesignsummary

•  Acceptthefactthatyou,andothers,willmakemistakes–  UseyourAPIasyoudesignit–  Getfeedbackfromothers–  Hideinforma9ontogiveyourselfmaximumflexibilitylater–  Designforinaien9ve,hurriedusers–  Documentreligiously

•  Ittakesalotofworktomakesomethingthatappearsobvious

Page 28: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

28 17-214

Semesteroverview

•  Introduc9ontoJavaandO-O•  Introduc9ontodesign

–  Designgoals,principles,paierns•  Designingclasses

–  Designforchange–  Designforreuse

•  Designing(sub)systems–  Designforrobustness–  Designforchange(cont.)

•  Designcasestudies•  Designforlarge-scalereuse•  Explicitconcurrency

•  Crosscukngtopics:–  Moderndevelopmenttools:

IDEs,versioncontrol,buildautoma9on,con9nuousintegra9on,sta9canalysis

–  Modelingandspecifica9on,formalandinformal

–  Func9onalcorrectness:Tes9ng,sta9canalysis,verifica9on

Page 29: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

29 17-214

Concurrency,mo9va9onandprimi9ves

•  Thebackstory–  Mo9va9on,goals,problems,…

•  Concurrencyprimi9vesinJava•  Comingsoon(nottoday):

–  Higher-levelabstrac9onsforconcurrency–  Programstructureforconcurrency–  Frameworksforconcurrentcomputa9on

Page 30: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

30 17-214

PowerrequirementsofaCPU

•  Approx.:Capacitance*Voltage2*Frequency•  Toincreaseperformance:

–  Moretransistors,thinnerwires•  Morepowerleakage:increaseV

–  IncreaseclockfrequencyF•  Changeelectricalstatefaster:increaseV

•  Dennardscaling:Astransistorsgetsmaller,powerdensityisapproximatelyconstant…–  …un9learly2000s

•  Heatoutputispropor9onaltopowerinput

Page 31: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

31 17-214

Oneop9on:fixthesymptom

•  Dissipatetheheat

Page 32: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

32 17-214

Oneop9on:fixthesymptom

•  Beier:Dissipatetheheatwithliquidnitrogen–  OverclockingbyTom'sHardware's5GHzproject

http://www.tomshardware.com/reviews/5-ghz-project,731-8.html

Page 33: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

33 17-214

Processorcharacteris9csover9me

Page 34: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

34 17-214

Concurrencythenandnow

•  Inthepast,mul9-threadingjustaconvenientabstrac9on–  GUIdesign:eventdispatchthread–  Serverdesign:isolateeachclient'swork–  Workflowdesign:isolateproducersandconsumers

•  Now:requiredforscalabilityandperformance

Page 35: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

35 17-214

Weareallconcurrentprogrammers

•  Javaisinherentlymul9threaded•  Tou9lizemodernprocessors,wemustwritemul9threadedcode•  Goodnews:alotofitiswriienforyou

–  Excellentlibrariesexist(java.util.concurrent)•  Badnews:yous9llmustunderstandfundamentals

–  …touselibrarieseffec9vely–  …todebugprogramsthatmakeuseofthem

Page 36: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

36 17-214

Aside:Concurrencyvs.parallelism,visualized

•  Concurrencywithoutparallelism:

•  Concurrencywithparallelism:

Page 37: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

37 17-214

BasicconcurrencyinJava

•  Aninterfacerepresen9ngataskpublicinterfaceRunnable{voidrun();}

•  AclasstoexecuteataskinathreadpublicclassThread{publicThread(Runnabletask);publicvoidstart();publicvoidjoin();…}

Page 38: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

38 17-214

Example:Money-grab(1)

publicclassBankAccount{privatelongbalance;publicBankAccount(longbalance){this.balance=balance;}staticvoidtransferFrom(BankAccountsource,BankAccountdest,longamount){source.balance-=amount;dest.balance+=amount;}publiclongbalance(){returnbalance;}}

Page 39: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

39 17-214

Example:Money-grab(2)publicstaticvoidmain(String[]args)throwsInterruptedException

{BankAccountbugs=newBankAccount(100);BankAccountdaffy=newBankAccount(100);ThreadbugsThread=newThread(()->{for(inti=0;i<1_000_000;i++)transferFrom(daffy,bugs,100);});ThreaddaffyThread=newThread(()->{for(inti=0;i<1_000_000;i++)transferFrom(bugs,daffy,100);});bugsThread.start();daffyThread.start();bugsThread.join();daffyThread.join();System.out.println(bugs.balance()+daffy.balance());}

Page 40: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

40 17-214

Whatwentwrong?

•  Daffy&Bugsthreadshadaracecondi.onforshareddata–  Transfersdidnothappeninsequence

•  Readsandwritesinterleavedrandomly–  Randomresultsensued

Page 41: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

41 17-214

Thechallengeofconcurrencycontrol

•  Notenoughconcurrencycontrol:safetyfailure–  Incorrectcomputa9on

•  Toomuchconcurrencycontrol:livenessfailure–  Possiblynocomputa9onatall(deadlockorlivelock)

Page 42: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

42 17-214

Sharedmutablestaterequiresconcurrencycontrol

•  Threebasicchoices:1.  Don'tmutate:shareonlyimmutablestate2.  Don'tshare:isolatemutablestateinindividualthreads3.  Ifyoumustsharemutablestate:limitconcurrencytoachievesafety

Page 43: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

43 17-214

Aneasyfix:

publicclassBankAccount{privatelongbalance;publicBankAccount(longbalance){this.balance=balance;}staticsynchronizedvoidtransferFrom(BankAccountsource,BankAccountdest,longamount){source.balance-=amount;dest.balance+=amount;}publicsynchronizedlongbalance(){returnbalance;}}

Page 44: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

44 17-214

ConcurrencycontrolwithJava'sintrinsiclocks

•  synchronized(foo){…}–  Synchronizesen9reblockonobjectfoo;cannotforgettounlock–  Intrinsiclocksareexclusive:Onethreadata9meholdsthelock–  Intrinsiclocksarereentrant:Athreadcanrepeatedlygetsamelock

Page 45: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

45 17-214

ConcurrencycontrolwithJava'sintrinsiclocks

•  synchronized(foo){…}–  Synchronizesen9reblockonobjectfoo;cannotforgettounlock–  Intrinsiclocksareexclusive:Onethreadata9meholdsthelock–  Intrinsiclocksarereentrant:Athreadcanrepeatedlygetsamelock

•  synchronizedonaninstancemethod–  Equivalenttosynchronized(this){…}foren9remethod

•  synchronizedonasta9cmethodinclassFoo–  Equivalenttosynchronized(Foo.class){…}foren9remethod

Page 46: Josh Bloch Charlie Garrod Darya Melichercharlie/courses/17-214/2018-fall/slides/... · 17-214 2 Administrivia • Homework 5 team sign-up deadline tonight • Team sizes, presentaon

46 17-214

Summary

•  Likeitornot,you’reaconcurrentprogrammer•  Ideally,avoidsharedmutablestate

–  Ifyoucan’tavoidit,synchronizeproperly