You are on page 1of 9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

n N ph c n K g h o g

Ta gc rn h rn i n Tmto gdn n

Din Di n n i C gm i ? Di n n

T hv h n in

G ip

Tm kim...
Bi vit hng dn JSE V T I rVP D n c ogihu1k h h h i ti h a c L h in : V nH y0 7 1 8 8 u 97103 T hN 0 0 5 9 5 hn hn 99616

Tmto gdn n C g m i rn i ? Ta gc rn h Dn n i B i i H gD Vt n n

D n coty d gn s C T h h un n h n N T L h in : V nH y 9 7 1 0 3 u 07188 T hN 0 0 5 9 5 hn hn 99616

l n t n jv ( ltra ig nJv ) a u g r g a a mut he dn i a a o i


Dsus ni ' i i h gd JEsatdb ta h y c 8 4 1 . i si nB vt n n S'tre y rn u v , / / 0 c o

l n to g a a mut h e dn i J v ) a u g r n jv ( ltra ig n a a i

D n c ogihuk h h h i ti h a c L h in : V nH y0 7 1 8 8 u 97103 T hN 0 0 5 9 5 hn hn 99616

tranhuyvc
A mnsrtr d ii ao t

Muthedt n jv ltra r g a a i o 1 K n m . hii 1 Thread l mt n v (h m) n cha cc dng iu khin trong mt tin trnh hay ng dng, chng c h iu hnh s dng thc thi mt cng vic. vi c ch multithread ng dng V ca ta c th thc thi nhiu cng vic ng thi. M ihed e tra s c mt ch s xc nh quyn u tin, thread no c quyn u tin cao s c thc thi trc, thp th thc thi sau. v Vic thc thi v nh ch s u tin s c thc hin t ng bi h iu hnh trnh mt thread no i qu lu m khng c vo x l. Cng nh cc ngn ng lp trnh khc, h tr ngay ( o g a n java tn b r thn ngn ng) h cc c , l ca mt ng dng k y u yu u x muthed ltra . i 1 T ov q a nl tra . a 2 u hed Trong chng trnh java lun c mt thread chnh c thc thi, cc thread khc s c to ra nh cc thread con, m u v kt vic thc mt ng dng c thc hin bi thread chnh . Hnh di minh ha vng i ca mt thread: t ov q a nl tra t n j a chng ta da vo lp Thread v a u hed r g a , o v R n a litr c u n benef e a Runnable l mt interface dng cc lp khc implement s d n tra . u g hed Trong lp implement bt buc phi nh ngha mt phng thc l void run(. ) V d t c 2lp StringThread implement Runnable, mt lp u a v T s ls t or tra v rnn . et as a C a hed u p bic s Sr g hedi l ns u n b { u l l s tn T ra mpe tR n a l c a i me e piae tn s ; r t Sr g t v i r piaen n m; r t it u v Sr g hedSr gsit ) tn T ra (tn ,n n i i { s =n w Sr gs; t r e tn () i n m =n u ; } / (o -a a o) * n nJ v d c * e jv . n .u n be rn) @sea al gR n a l u ( a #

D n c ogihus p mc n n h h h i ti n h g g L h in : V nH y0 7 1 8 8 u 97103 T hN 0 0 5 9 5 hn hn 99616

congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/

1/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

* / @Ovrie er d p biv i rn) u l od u ( { c fr it =1 i =n m;+ ) o ( i ; < u i+ n S s m.u.r t t+" ) yt o t i ( r "; e pn s } } p bic s T s ls { u l l s et as c a C /* * * aa ag @p rm rs * / p bis t v i manSr g] rs { u l t i od i(tn [ ag) c ac i Sr g hedt n w Sr g hed"hed,0; tn T ra = e tn T ra ( ra "1 ) i i T n w T ra ( .at ; e hedts r ) )t ( } } K q a i r m hn s l T ra T ra T ra T ra T ra t u n a n h e hed hed hed hed hed : T ra T ra T ra T ra T ra hed hed hed hed hed Thread l mt lp vit sn trong java, mp me t u n b n i l n R n al e e itr c. chng ta mun s dng thread ch cn vit mt nef eNu a lp v k tha (xe d) lp Thread ny. etn s t M t h m t gd n c a hed s h n u g u T ra start bt u thc thi thread sleep a trng thi v trng thi i ( khng thc thi na) resume thc thi li thread t trng thi i hoc dead- c lk o join i cho n khi thread ny cht s l e i m t tra cn n s g a b k l i i k Av r hed a g n h y i i a l eNa l tnc atra gt me y u hed getPriority tr v u tin ca thread eNa t c otra st me tn h hed setPriority t u tin cho thread V d tng t vic s dng thread vi Runnable interface,h n t c g a cng c th k tha t lp c sn l Thread nh sau: c s Sr g hedetn s hed l s tn T ra xe d T ra { a i p biv i rn) u l od u ( { c S s m.u.r t (I h r sces l f m T ra c s " yt o t i l "n ei u cs ul r e pnn t f y o hed l s ) a !; } } p bic s T s ls { u l l s et as c a C p bis t v i manSr g] rs { u l t i od i(tn [ ag) c ac i Sr g hedt n w Sr g hed) tn T ra = e tn T ra ( i i ; n w T ra ( .at ; e hedts r ) )t ( } } K q a i r s l: n eisces l f m T ra c s t u n a e I h r u cs ul r t f y o hed l s a! 1 Cc lp Timer, i rakv Sh d l g ak . 3 TmeT s c eui T s n Timer l mt lp tin ch gip cho vic lp lch v kim sot vic thc thi mt task v no . u b nmu d n v c Vd a n g i c pn th n t n 5pht ti, thng tin ch c tn ti h t g r g o hay 1 h sau s t ng b xa i, M t h m t g u n 0 s h n d g t n Tme n : r g i rh o schedule ln lch thc thi task khi no bt u, th c a k t h y l pl i a ,
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 2/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

cancel dng timer v hy tt c cc task ln lch trong timer purge xa tt c cc task dng trong hng i timer TimerTask l mt lp tru tng implement Runnable interface, ip ng cho vic lp lch thc thi cc thread V d ta c mt lp MyTimerTask k tha t TimerTask nh bn di c s My i raketn s i rak l s TmeT s xe d TmeT s { a p biv i rn) u l od u ( { c S s m.u.r t (R n igte c eue ts b Tme" yt o t i l " u nn h sh d l ak y i r ; e pnn d ) S s m.c) yt g(; e } } p bic s T s ls { u l l s et as c a C p bis t v i manSr g] rs { u l t i od i(tn [ ag) c ac i Tme t r n w Tme(; i ri = e i r) me My i rakts =n w My i rak) TmeT s ak e TmeT s( ; t r c euets, 0 0 2 0 ) / xc t ts at 3 e cn s n te i . h d l ak 3 0 , 0 0; E eue ak f r sn o d a d h n me s ( / e rpa i 2scn s eid eetn eo d pr o } } K q a i r m hn su5 i s l R n ig h sh d l ts t u n a n h a g y e u nn te c eue ak : d b Tme yi r R n igte c eue ts b Tme u nn h sh d l ak y i r d 1 X l cc vn chng trong multithread nh synchronized, c, . 4 lk o da lc, i n ty ed ok wat oi , f gb (y c rnzt n l c ch gip cho ng b vic truy n S n ho i i ) ao c pc n ti g ync an i utra k n a . g n u u h hed h c h u Nh chng ta bit v c ch thread l c ch lm vic ng thi do c kh nng mt ti nguyn s b truy cp bi nhiu thread khc nhau. V d ta xy dng 3lp Socola, rd crC nu rLp Socola cha Po u e, o sme. t gt , Producer to thng tin v gn vo cho Socola, h n i lp n Lp C nu r e ( tu )h n t . o sme s n tu h i t g i n p bic s T s ls { u l l s et as c a C p bic s S cl { u l l s ooa c a piaen cne t=0 r t it o tns ; v p bib oeni e iig o t t u l o l s mann C ne s c a R n; p bisn ho i dit e( { u l y c rnz n gt c e ) /pit nosre /r o t cen n S s m.u.r t (\C nu r e " ticne t ; yt o t i l "to sme gt + hs o t s e pnn . n) rtr cne t eun o tns ; } p bisn ho i dv i stn p o t t { u l y c rnz od e( t i ne s c e i C n) ticne t=pC ne t hs o tns io tns . ; /pit nosre /r o t cen n S s m.u.r t (Po u e st +ticne t ; yt o t i l "rd cr e " hs o t s e pnn . n) } } p bic s Po u e etn s hed u l l s rd cr xe d T ra { c a piae ooascl; r t S cl ooa v Po u e(ooap ooa { rd crS cl S cl) scl =p ooa ooa S cl; } p biv i rn) u l od u ( { c
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 3/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

frit =0 i 1 ;+ ) o( i ; < 0 i+ { n scl. t) ooas ( ; ei t { r y T ra .ep1 0; heds e(0 ) l } ac (nerpeE cpine { cth I tru td xet ) o } } } } p bic s C nu r xe d T ra { u l l s o sme etn s hed c a piae ooascl; r t S cl ooa v C nu rS cl p ooa { o sme(ooa S cl) scl =p ooa ooa S cl; } p biv i rn) u l od u ( { c frit =0 i 1 ;+ ) o( i ; < 0 i+ { n scl.e(; ooagt ) t { r y T ra .ep1 0; heds e(0 ) l } ac (nerpeE cpine { cth I tru td xet ) o } } } } p bis t v i manSr g] rs { u l t i od i(tn [ ag) c ac i T s ls t n w T s ls(; et as = e et as) C C S cl s t e S cl(; ooa = . w ooa) n Po u e p=t e Po u e() rd cr . w rd crs; n C nu r =t e C nu rs o sme c . w o sme( ; n ) ps r ) .at ; t ( c tr ) .at ; s ( } } K q a i r m hn s k g i n n a t i l nc a y t u n a n ih e h n g g h u a cc h , v d 1 nc a y u l h : Po u e st rd cr e 0 C nu r e 0 o sme gt Po u e st rd cr e 1 C nu r e 1 o sme gt Po u e st rd cr e 2 C nu r e 2 o sme gt Po u e st rd cr e 3 C nu r e 3 o sme gt Po u e st rd cr e 4 C nu r e 4 o sme gt C nu r e 4 o sme gt Po u e st rd cr e 5 Po u e st rd cr e 6 C nu r e 6 o sme gt Po u e st rd cr e 7 C nu r e 7 o sme gt C nu r e 7 o sme gt
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 4/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

Po u e st rd cr e 8 C nu r e 8 o sme gt Po u e st rd cr e 9 T v d trn ta thy c chung mt ti nguyn l Socola m c 2 i tng cng truy cp c t s hr m tu nk iry p h i a uh n ht c u ng thi. gi ta mun l ch khi Producer to ra thng tin th By Consumer mi n thng tin , h n mu C nu r nn i ul n k g n o sme h c n m th n t , h Po u e n t o a h n t t o sme g t g i k i rd cr a g a r t g i h C nu r n n ng ch, no Producer to ra thng tin xong th Consumer mi vo khi t gt . th ta phi dng c ch ng b trong java vi n h n i vy n cc t kha synchronized, i)n ty)n ty l) h n l i wat , oi ( oi Al v c i h a 2 ( f , f ( hm get v set trong lp Socola nh sau: p bisn ho i dit e( { u l y c rnz n gt c e ) whl i e iig o tns =fl ) i( R mann C ne t= a e { es s t { r y wat ; i) ( } ac (nerpeE cpine { cth I tru td xet ) o } } i e iig o tns fl ; s mann C ne t= as R e /pit nosre /r o t cen n S s m.u.r t (\C nu r e " ticne t ; yt o t i l "to sme gt + hs o t s e pnn . n) /Noi Po u e t po u e e cne t / ty rd cro rd c n w o t s f n n ty l) oi Al ; f ( rtr cne t eun o tns ; } p bisn ho i dv i stn p o t t { u l y c rnz od e( t i ne s c e i C n) whl i e iig o tns =t e { i( R mann C ne t= r ) es u t { r y wat ; i) ( } ac (nerpeE cpine { cth I tru td xet ) o } } ticne t=pC ne t hs o tns io tns . ; i e iig o tns t e s mann C ne t= r ; R u /pit nosre /r o t cen n S s m.u.r t (Po u e st +ticne t ; yt o t i l "rd cr e " hs o t s e pnn . n) /Noi C nu roeths o t t / ty o sme t a ticne s f n n ty l) oi Al ; f ( } } Kt qu in ra lun lun nh sau: Po u e st rd cr e 0 C nu r e 0 o sme gt Po u e st rd cr e 1 C nu r e 1 o sme gt Po u e st rd cr e 2 C nu r e 2 o sme gt Po u e st rd cr e 3 C nu r e 3 o sme gt
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 5/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

Po u e st rd cr e 4 C nu r e 4 o sme gt Po u e st rd cr e 5 C nu r e 5 o sme gt Po u e st rd cr e 6 C nu r e 6 o sme gt Po u e st rd cr e 7 C nu r e 7 o sme gt Po u e st rd cr e 8 C nu r e 8 o sme gt Po u e st rd cr e 9 C nu r e 9 o sme gt C 3h m c n : i) thread vo trng thi ch khi no c notify( h c wat a ( )o n ty l) s thc hin tip oi Al th f ( oi ( nh thc thread ang i, c nhiu thread ang i,h n ty) f nu t mt trong nhng thread c nh thc thi. oi Al nh thc tt c cc thread ang i n ty l) f ( Noe Nhuk ih n t k g nh c h n t g t: i h c g a h n c o kgh n b n u h m ( gsn ho i d m h c g m t g yn d n y c rnz ) c i n n b e vi d n cd t yc pti g yn ta c th dng khi ng b nh g oer u n u , su a: sn ho i do j t{ y c rnz (be ) e c / C c ul n c g / c h n n b } V d : bn s dng lp Socola l ca khch hng bn a u Khi c o bn khng th chnh sa nh ngha hm get v set trong h, Socola c vy th bn c th dng khi ng b bn trn cng s cho kt qu tng t. D a lc (h ac ttrong x l a lung xy l khi m mt thread edok k h ) c a vo trng thi ch ti nguyn v khng bao gi c nh thc li v ti nguyn khng bao gi c gii phng. r hn ta v d A B C l thread trong trng thi ch;A r ,Cl ti g ynd n u ,, r ,B r n u g chung v ch duy nht mt thread s dng trong mt thi m, nguyn ch c gii phng khi thread lm xong v khng i ti s dng na. A gi rA, rB ch B gi rB, rC ch C gi rC, rA ch T v d trn ta thy A, , l nhng thread ang trong trng thi BC ch ti nguyn, nhin ti nguyn ca chng khng bao gi c tuy ga i h n , mi mi chng c ch thi. h nc da l kt i p g v a h ed c h o chng ta phi a ra,a ii nv c p h ttuh ti g yn c t i c p ,h i n u c occ hedv h nn yc k hutu to nc ii n h tra i h n i h t a t v c ,u n i k gc ci g p rn h t da l k i n y ty h h n n o i t h o n o n ed c. n o 1 Nhng lp tin ch trong lp trnh a lung ( ltra ) . 5 muthed i Trong java xy dng mt vi lp gip h tr lp trnh a lung, chng c t trong gi Concurent nh: e p oeL c, o d i , Sma h r, ok C n io tn C n urnMa , o c re tikd u u , o c re t p C n urnLn eQ e e Semaphore l mt lp tin ch xy dng trong java ( v 5 d n j a )g a gii hn s lng thread truy cp n ti nguyn. ut n i thread cn yu cu s chp nhn truy cp ti nguyn t sma h r b gh m aq i , thread s v trng thi i (l k e p oe n cur v e b c) o cho n khi c chp nhn, thread c chp nhn n thc khi h ncn v c u an x n s g i rl s t i g i c o g e o h m e ae r v e a cho semaphore mt s chp nhn cn trng semaphore cp c otra k . h hed h c Lock l mt interface c xy dng nhm m rng hn vic qun l truy cp ti nguyn trong nhiu thread hn so vi cch dng synchronized chng hn nh c th h tr nhiu iu kin (o dt no j tt n lc, cn io be )r g ok hoc h tr nhiu thut ton cho i c o
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 6/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

c anlock trnh deadlock tt hn, K i g ok h n t n n h i h d n L c c g a theo mt template chun nh sau: L c l .; ok = . . lok) . c(; l t { r y / Cc task truy cp ti nguyn bo v bi lock t y / }ial { f l n y l nok) . lc(; u }

Condition l mt interface dng nhm cch x l trong cc phng thc ( i n ty n ty l ca lp Object vo thnh mt i tng wat oi , oi Al , f f ) nhm a ra nhiu chn la hn trong vic ng b, u vd c gt c t d n n i ucn io v k i c g a n n h n a h g h o d in h n o h n t mu h t thc chnh xc iu kin no c s dng ti nguyn. V d t d n l i u C nu r u a ga vd o smeProducer trn,h m v o b t 2 i n lc, ok condition v chnh sa hai lm get v put th l ta cng c kt qu nh dng vi t kha synchronized: f a L c lc =n w R e t nL c( i l ok ok e enr tok) n a ; f a C n io cn io =lc.e C n io ( i l o dt n o dt n okn w o d i ) n i i tn ; p biit e( { u l n gt c ) iteut n rsl ; lc. c(; okl k) o t { r y whl i e iig o tns =fl ) i( R mann C ne t= a e { es s t { r y cn io .wat ; o dt na i) i ( } ac (nerpeE cpine { cth I tru td xet ) o } } i e iig o tns fl ; s mann C ne t= as R e /pit nosre /r o t cen n S s m.u.r t (\C nu r e " ticne t ; yt o t i l "to sme gt + hs o t s e pnn . n) /gt au /e v le rsl=cne t eut o tns ; /Noi Po u e t po u e e cne t / ty rd cro rd c n w o t s f n cn io .g aAl ; o dt ns n ll) i i ( }ial { f l n y lc.nok) oku lc(; } rtr rsl eun eut ; } p biv i stn pC ne t { u l od e( t io tns c i ) lc. c(; okl k) o t { r y whl i e iig o tns =t e { i( R mann C ne t= r ) es u t { r y cn io .wat ; o dt na i) i ( } ac (nerpeE cpine { cth I tru td xet ) o } }
congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/ 7/9

19/07/2012

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

ticne t=pC ne t hs o tns io tns . ; i e iig o tns t e s mann C ne t= r ; R u /pit nosre /r o t cen n S s m.u.r t (Po u e st +ticne t ; yt o t i l "rd cr e " hs o t s e pnn . n) /Noi C nu roeths o t t / ty o sme t a ticne s f n cn io .g aAl ; o dt ns n ll) i i ( }ial { f l n y lc.nok) oku lc(; } } K q a l l l t n y t u u n u n h : Po u e st rd cr e 0 C nu r e 0 o sme gt Po u e st rd cr e 1 C nu r e 1 o sme gt Po u e st rd cr e 2 C nu r e 2 o sme gt Po u e st rd cr e 3 C nu r e 3 o sme gt Po u e st rd cr e 4 C nu r e 4 o sme gt Po u e st rd cr e 5 C nu r e 5 o sme gt Po u e st rd cr e 6 C nu r e 6 o sme gt Po u e st rd cr e 7 C nu r e 7 o sme gt Po u e st rd cr e 8 C nu r e 8 o sme gt Po u e st rd cr e 9 C nu r e 9 o sme gt ConcurrentMap l mt interface k tha t Map dng ci tin, ti u hn khi chy Map trong ng dng a lung ( ltra ) muthed i V d cch dng ConcurrentHashMap tng t dng Map,u n i ty h n ngi ta thng k l nu chng trnh c cng nhiu thread truy c pv oc pn yt gC n urnMa s c o efr n e t Ma h d n o c r t p e h pr ma c t e o hn rt nhiu so vi dng Map vi ng b kiu synchronized p bis t C n urnMa < tn , r g c p u l t i o c re t p Sr g tn > Ma = c ac i Si n w C n urnHah p Sr g Sr g (0 0; e o c re t sMa < tn , tn > 1 0 ) i i p bis t v i manSr g] rs { u l t i od i(tn [ ag) c ac i c pp tfbe t i"""; Ma .uIA sn( d,1) " c pp tfbe t n me,ke " Ma .uIA sn( a ""i ) " n; c pp tfbe t e i,n k n a a o . m" Ma .uIA sn( mal "a i 2 @y h o o ) " " e c ; S s m.u.r t (Ma )/Pito cen yt o t i l c p; / r t sre e pnn n } K q a :n me ke ,ma = a i 2 @y h o o i 1 t u {a = i e i n k n a a o . m, = } n l e c d
ta h y c 8 4 1 rn u v , / / 0 # 1

: a lung trong java (multithreading in Java) C oe h s k bt i T ra v R n b , h n o h s d gci h m i h c i ga hed u a l k i t n e n ov a h y n ?


ga t6 1 1 1 in2 , / / 2 # 2

giant26

congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/

8/9

19/07/2012
Mme e br

a lung trong java (multithreading in Java) | Cng ng Java Vit Nam | Java Vit Nam | Java SE, Java

(np i gk t hv h c n n pv odn nn m nt l b i i n y) B h n h n in o g h i u u r i vt .

Chia s trang ny
Tw eet 0 Rcm ed eo m n O ep ro rc m e d ti B tef s o y u fin s n esn e o m n s hs e h i t f o r r d. . r e

Ta gc rn h

Dn n i

B i i H gD Vt n n

Bi vit hng dn JSE

Ven m s (I ita ee V) F rmsfw r b X n oo 0 1X n ooLd ou ot ae y e F r 2 1 e F r t.

L h v C gti Ta gc T p in i h n rn h o uk o &Q y h i h n u n Go aF e l le d b

congdongjava.com/forum/threads/a-lung-trong-java-multithreading-in-java.802/

9/9

You might also like