anteckningar

Trådar
Objekt-orienteradprogrammeringochdesign
AlexGerdes,2016
Trådar
• Många programmåste kunnahålla påmedflerasakersamtidigt:
•
•
•
•
bokningssystemavolikaslag
enwebbserversommåste kunnalevereraflerawebbsidorsamtidigt
engrafiskapplikationsomritarsamtidigtsomdenarbetarmednästa bild
ettgrafisktanvändargränssnitt somutför beräkningar ochsamtidigtär redo
atthadialogmedanvändaren
• Dennatypavprogramkallassamverkandeprogram(concurrent
programs).
• IJavabeskrivermanaktivaobjekt(ochparallellism) medhjälp av
standardklassenThread.Aktivitetersompågår samtidigtkallas
därför iJavaför trådar.
Icke-deterministisktbeteende
• Sekventiellaprogramsäges varadeterministiskavilketbetyderatt:
• vilkaoperationersomutförs iprogrammetär enkonsekvensavföregående
operationer
• detär förutsägbart ivilkenordningoperationernaiettsekventielltprogram
kommerattutföras
• Omettprogramkörs fleragånger medsammaindatakommersammaresultat
atterhållas varjegång
• Programmedparallellism uppvisaretticke-deterministisktbeteende:
• Ivilkenordningoperationernaskermellandeolikaprogramflödena vetviinte
• tvåprogramkörningar medsammaindatakangeolikaresultat
Övning
• Börjafrånkodensomfinnsattladdanerfrånhemsidan.
•
Vårgamlakodfrånförraveckanäruppdateradenligtvadvigjordepåförreföreläsningen.Gåigenomkodenochinspekteraimplementationen
avdenDecorator ochChain of Responisbility designmönster.
• ViharlagttillenextraklassCreator somkörientrådochläggertillpolygoner.
•
IDrawPolygonsfinnskodsomskaparoch startarenCreator trådmentyvärrfunkar detinteän.Fixadetta.Tips:komihågvarfördenandratrafikljusiSignal
projektetbörjade inteblinka.Tips2: körmodellenientråd(använd Thread och Runnable).
• Skapaenklass Terminator som körinsinegentrådochtarbortenpolygon. Meningenärattvikommerattläggatillenpolygon och
sedantaborten,dvsisammatakt.
•
•
•
•
•
•
•
•
Imodellenfinnsnuocksåenmetod(removePolygon) föratttabortenpolygon.
Körprogrammetoch kollaomdetkörutanproblem,dvseftervarjeadditionkommerenreduktion.
Troligenkör programmetinteutanproblemochaddition/reduktion skerinteisammatakt.Dessutomkandethända något`very bad’.Detkanvarasåattvi
försökeratttabort ettelementfrånentomlista.
LäggtillenkolliremovePolygon metoden(somförsta sats i metoden)somväntartillslistanärintetomtoch sedanfortsätter:while
(polygons.isEmpty()) {}
(while-bodyn skavaraempty alltså)
LäggtillenkolliaddPolygon metodensomväntartillslistanärtomtoch sedanfortsätter:while (!polygons.isEmpty()) {}
Körprogrammetigen,detkanhändavihamnarien‘Deadlock’ situation,dvscreatorn ochterminatornväntar på varandra.
Lägg tillsynchronized modifieraren tilladdPolygon och removePolygon, som förhindrar ‘interleaving’av satser.
Försökattåtgärda deadlocken medhjälpavmetodernawait()och notifyAll(), kollaAPIpånätet.
• Förutmaning:ibland kastasdetenConcurrentModificationException,fundera varförochförsök attfixadetta.