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.
© Copyright 2024