Java Concurency in Practice

Embed Size (px)

Citation preview

  • 8/13/2019 Java Concurency in Practice

    1/234

    !"#"$%&'())*&'+

    ,&-)"'./'*!"#$%&'()*

    +#,-(#("./

    01/23$!.142

    01/(52!167(("

    8$9#:;1.,(/

    813

  • 8/13/2019 Java Concurency in Practice

    2/234

    ## 0$9$>1%43""(%4?@%-"$4)#4(

    ,&0*1

    #$%& ''()$*+,$& %'''

    !"#$"%&'$()&*""+ ,)))

    -".'/,0123'& ,)4

    56+7"#3'.81'7$& ,4

    -.+/0$)&1&2& 0)3#4,0'3 & 11515 6 78$)9: ;)'$* '?C"?1076'!0G0?.& J

    15D5 ?.)$+#= +)$ EF$)9G.$)$ H

    (+)0& I&J4 #+K$ 0+L=& 1M-.+/0$) >5 ?.)$+# N+*$09 11

    ;:9:K(0$)&L(?'0.A0C'$BM 9;

    ;:;:5$"1)6)$B 9@

    ;:@:I"6+)78 9J

    ;:D:N=0?.)78A$0$'#)$(I"6+& 9O

    ;:H:I)4'7'&&07.>'?C"?1076' ;P

    -.+/0$) @5 N.+)'"O PQR$,0= >@

    @:9:Q)&)R)3)$B ;@

    @:;:>=R3)60$)"707./&602' ;J

    @:@:L(?'0.-"7C)7'1'7$ ;S

    @:D:F11=$0R)3)$B @9

    @:H:A0C'

    >=R3)60$)"7

    @@

    -.+/0$) D5 -3K/3='"O PQR$,0= @S

    D:9:T'&)87)780L(?'0.&0C'-30&& @U

    D:;:F7&$076'-"7C)7'1'7$ @O

    D:@:T'3'80$)78L(?'0.A0C'$B D9

    D:D:5..)78V=76$)"703)$B$"/,)&$)78L(?'0.&0C'-30&&'& DU

    D:H:T"6=1'7$)78AB76(?"7)G0$)"7>"3)6)'& DO

    -.+/0$) C5 ;4'L#'"O ;L3,B= C1

    H:9:AB76(?"7)G'.-"33'6$)"7& H9

    H:;:-"76=??'7$-"33'6$)"7& HD

    H:@:

    *3"6+)78

    W='='&

    07.

    $('

    >?".=6'?

    6"7&=1'?

    >0$$'?7

    HJ

    H:D:*3"6+)7807.F7$'??=2$)R3'

  • 8/13/2019 Java Concurency in Practice

    3/234

    ###A@%:(B

    (+)0& I&N0)4,04)' O&-3 ,4))$ 0&6//L',+0'3 =& S1-.+/0$) T5 ?+=B E%$,40'3" S>

    J:9:/,'6=$)78L0&+&)7L(?'0.& U;

    J:;:L('/,'6=$"?V?01'#"?+ UD

    J:@:V)7.)78/,23")$0R3'>0?033'3)&1 US

    A=110?B S@

    -.+/0$) S5 -+",$LL+0'3" +"# N.40#3G" HC

    U:9:L0&+-076'330$)"7 SH

    U:;:A$"22)780L(?'0.R0&'.A'?4)6' O@

    U:@:!07.3)785R7"?103L(?'0.L'?1)70$)"7 9PP

    U:D:YQ"3)6)'& 9PD

    S:;:A)G)78L(?'0.>""3& 9PH

    S:@:-"7C)8=?)78L(?'0.>""3/,'6=$"? 9PJ

    S:D:/,$'7.)78L(?'0.>""3/,'6=$"? 999

    S:H:>0?033'3)G)78E'6=?&)4'538"?)$(1& 99;

    A=110?B 99J

    -.+/0$) U5 VW! 6//L',+0'3"= 11S

    O:9:K(B0?'N%F&A)783'$(?'0.'.M 99U

    O:;:A("?$?=77)78N%FL0&+& 99O

    O:@:I"78?=77)78N%FL0&+& 9;9

    O:D:A(0?'.T0$0'?C"?1076' 9JP

    9;:@:54").)78>'?C"?1076'L'&$)78>)$C033& 9JH

    9;:D:-"123'1'7$0?BL'&$)78522?"06('& 9JU

    A=110?B 9JO

    (+)0& 8I&6#F+ ,$#&?3/',=& 1SM

    -.+/0$) 1@ 2 E%/L','0 X3,B= 1S1

    9@:9:I"6+07.E''7$?07$I"6+ 9U9

    9@:;:>'?C"?1076'-"7&).'?0$)"7& 9UD

    9@:@:V0)?7'&& 9UH

  • 8/13/2019 Java Concurency in Practice

    4/234

  • 8/13/2019 Java Concurency in Practice

    5/234

    9C!=#/)#%13%)/T(K3(/)/N/#%$42(#)/=$/)T(/3.)6#)213)R:(K3$)(R)1,#4#)?DT"7[$T"$()&: CV

    =#/)#%1%43""(%4?DT"7[$T"$()&: CX

    =#/)#%1:()2$)613.:8($:.14O#J@%)"#%/#4=14O/6("(I1)T((%)"$%)D CX

    M#1%43""(%4?1J'7"*892"4:&;@

    =#/)#%1%J#%(,(%)1J=14$.-"#,#)#9($%:T(J("(%4(Y$"#$7.(/D S]

    =#/)#%

  • 8/13/2019 Java Concurency in Practice

    6/234

  • 8/13/2019 Java Concurency in Practice

    7/234

    9##C!=#/)#%$.43.$)()2(F$,(Y$.3(+6#4(D QX

    =#/)#%1%J3/#%1%43""(%4?@%-"$4)#4(

  • 8/13/2019 Java Concurency in Practice

    13/234

    B###G!-"(J$4(

    -)*6"'*R) )2#/6"#)#%-PB5(")&"135)2$)4"($)(:)2(/(J$4#.#)#(/d#%$::#)#1%)1

    :(/4"#7#%1%43""(%4? #% -"$4)#4( #/ %1) $% #%)"1:34)#1% )1 41%43""(%4? J1" )2$)W /(( )2( )2"($:#%

  • 8/13/2019 Java Concurency in Practice

    14/234

    #9 0$9$>1%43""(%4?@%-"$4)#4(

    >2$5)("/Gb+2"($:F$J()?c$%:SbF2$"#%$%4(..$)#1%$%:F23):16%c:($./6#)2)(42%#K3(/J1"

    41%9#%4#%2$5)("/ C]CGc 41%4("%/ #)/(.J 6#)2 (%/3"#%2$5)("C]bR91#:#%2$5)("/CSCQc419("/)15#4/)2$)$"(.#O(.?)17(1J#%)("(/)1%.?)1(B5("#(%4(::(9(.15("/e

    (B5.#4#).14O/W$)1,#49$"#$7.(/W%1%7.14O#%?*3

    E2#.(,$%?1J)2(2#.:"(%`/;1/5#)$.1J-#))/73"

  • 8/13/2019 Java Concurency in Practice

    15/234

    B9G!-"(J$4(

    2/3./&4DA2*33.:"&E>./5"?B"+.%C%)."2/3.A

    G)M04* R= &-.&";# D23G$9$M0&RS #)G&9 =TT /24; #29.U54#.R=T 04#.V W%29 U4". 4]Z[ 4R^ZZZZZZ[ 4__V

    ;2,2.84"6UV[D200&*.42"#+#29.U04#.V[

    \

    F'.#JJ!#JJ.(W!$""?;$?(/W8$6#:a3"*?%#(4WR%

  • 8/13/2019 Java Concurency in Practice

    16/234

  • 8/13/2019 Java Concurency in Practice

    17/234

    CS!>2$5)("C@%)"1:34)#1%C]!CDCDRbY("?c!"#(J;#/)1"?1J>1%43""(%4?

    $:">.*)@ ,&.)%0('./%&E"#)#%

  • 8/13/2019 Java Concurency in Practice

    18/234

    G 0$9$>1%43""(%4?@%-"$4)#4(

    @A@AFGH*)+I;)/*67/3.%)+%6$%&'())*&'+@%)2($%4#(%)5$/)W41,53)("/:#:%`)2$9(15("$)#%

  • 8/13/2019 Java Concurency in Practice

    19/234

    SS!>2$5)("C@%)"1:34)#1% CC!CDGD!(%(J#)/1J+2"($:/

    @ADA;*&*6/.3%6J:)*"03E2(%3/(:5"15(".?W)2"($:/4$%"(:34(:(9(.15,(%)$%:,$#%)(%$%4(41/)/$%:#,5"19()2(5("J1",$%4(1J41,5.(B

    $55.#4$)#1%/D+2"($:/,$O(#)($/#(")1,1:(.21623,$%/61"O$%:#%)("$4)W7?)3"%#%

  • 8/13/2019 Java Concurency in Practice

    20/234

    U 0$9$>1%43""(%4?@%-"$4)#4(

    @J$%$55.#4$)#1%

  • 8/13/2019 Java Concurency in Practice

    21/234

    LS!>2$5)("C@%)"1:34)#1% CG!CDSDT#/O/1J+2"($:/

    @ALAN/3

  • 8/13/2019 Java Concurency in Practice

    22/234

    Q 0$9$>1%43""(%4?@%-"$4)#4(

    !"#$%&'&()&"*..3/)"$)(/$41,,1%41%43""(%4?2$*$":4$..(:$"$4(41%:#)#1%DE2()2("1"%1)"&-.B$0)&"()3"%/$

    3%#K3( 9$.3( 62(% 4$..(: J"1, ,3.)#5.( )2"($:/W $/ "(K3#"(: 7? #)/ /5(4#J#4$)#1%W :(5(%:/ 1% 216 )2( "3%)#,(

    #%)(".($9(/)2(15("$)#1%/ 62#42#/%1)$:(/#"$7.(/)$)(1J$JJ$#"/D

    !(4$3/()2"($://2$"()2(/$,(,(,1"?$::"(///5$4($%:"3%41%43""(%).?W)2(?4$%$44(//1",1:#J?9$"#$7.(/)2$)

    1)2(")2"($:/,#

  • 8/13/2019 Java Concurency in Practice

    23/234

    VS!>2$5)("C@%)"1:34)#1% CG!CDSDT#/O/1J+2"($:/

    @%6(..:(/#1%)(B)/6#)42(/ 62(%)2(/42(:3.("/3/5(%:/)2($4)#9( )2"($:)(,51"$"#.?/1

    $%1)2(")2"($:4$%"3% $"(,1"(J"(K3(%) #%$55.#4$)#1%/6#)2,$%?)2"($:/W$%:2$9(/#

  • 8/13/2019 Java Concurency in Practice

    24/234

  • 8/13/2019 Java Concurency in Practice

    25/234

    \S!>2$5)("C@%)"1:34)#1%CS!CDUD+2"($:/$"(P9("?62("(

    fUgR%/6("e?(/W73)#)`/%1)$..)2$)4.($"J"1,)2(0$9$:14 ?132$9()1"($:)2(TZ@/5(4D

    R "(,1)( 17[(4) ,3/)

  • 8/13/2019 Java Concurency in Practice

    26/234

    C] 0$9$>1%43""(%4?@%-"$4)#4(

    -").,TS(&0"5*&."?3

    =>.?@(,7A +2"($:F$J()?

    =>.?@(,

    6A

    F2$"#%.?@(,8A >1,51/#%.?@(,BA !3#.:#%

  • 8/13/2019 Java Concurency in Practice

    27/234

    CC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CU!>2$5)("GD+2"($:

    F$J()?

    $:">.*)DAJ:)*"0C"6*.+-("2$5//3"5"#/#%

  • 8/13/2019 Java Concurency in Practice

    28/234

    CG 0$9$>1%43""(%4?@%-"$4)#4(

    $.)2131""(4)%(// ,($%/ )2$) $ 4.$// 41%J1",/ )1 #)/ /5(4#J#4$)#1%D R

  • 8/13/2019 Java Concurency in Practice

    29/234

    CS

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CU!>2$5)("GD+2"($:

    F$J()?

    +2"($:/$J(4.$//(/(%4$5/3.$)($%?%((:(:/?%42"1%#*$)#1%/1)2$)4.#(%)/%((:%1)5"19#:()2(#"16%D

    DA@A@A=1"5>?*TFC.".*?*33C*)#?*.

    @% >2$5)(" CW 6( .#/)(: $ %3,7(" 1J J"$,(61"O/ )2$) 4"($)( )2"($:/ $%: 4$.. ?13" 41,51%(%)/ J"1, )21/( )2"($:/W

    .($9#%

  • 8/13/2019 Java Concurency in Practice

    30/234

    CU 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4DADAC*)#?*..:".$%(&.3N*Q(*3.38/.:%(..:*P*'*33")+C+&':)%&/O"./%&A!"#$%!"%&'()

    b,2.=89&$;'$%&G)M04* *0$## !"#$%&D2)".4"613%)#%

  • 8/13/2019 Java Concurency in Practice

    31/234

    CL

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CU!>2$5)("GD+2"($:

    F$J()?$%: )2(% )$O( $4)#1% 7$/(: 1% )2$) 17/("9$)#1% b4"($)( jcd 73) #% J$4) )2( 17/("9$)#1% 413.: 2$9( 7(41,( #%9$.#:

    7()6((%)2()#,(?1317/("9(: #)$%:)2()#,(?13$4)(:1% #)b/1,(1%((./(4"($)(:j #%)2(,($%)#,(cW4$3/#%?*TN"'*$%&0/./%&3/&2"O+,&/./"?/O"./%&

    R41,,1% #:#1, )2$)3/(/42(4O)2(%$4) #/ .$*? #%#)#$.#*$)#1%D+2(

  • 8/13/2019 Java Concurency in Practice

    32/234

    CQ 0$9$>1%43""(%4?@%-"$4)#4(

    /$J(D@%)2(%(B)/(4)#1%W6(`..41%/#:(".14O#%

  • 8/13/2019 Java Concurency in Practice

    33/234

    CV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CU!>2$5)("GD+2"($:

    F$J()?2/3./&4DAVAC*)#?*..:".F..*5>.3.%$"':*/.32"3.N*3(?.8/.:%(.F0*Q(".*F.%5/'/.+A!"#$%!"%&'()

    b,2.=89&$;'$%&G)M04* *0$## !"#$%&D$*84"6

  • 8/13/2019 Java Concurency in Practice

    34/234

    CX 0$9$>1%43""(%4?@%-"$4)#4(

    F#%4(1%.?1%()2"($:$)$)#,(4$%(B(43)($7.14O1J41:(

  • 8/13/2019 Java Concurency in Practice

    35/234

  • 8/13/2019 Java Concurency in Practice

    36/234

    G] 0$9$>1%43""(%4?@%-"$4)#4(

    E2(%$9$"#$7.( #/

  • 8/13/2019 Java Concurency in Practice

    37/234

    GC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CU!>2$5)("GD+2"($:

    F$J()?S/4()*DA@A-%%)$%&'())*&'+%6'7"*892"4:&;

  • 8/13/2019 Java Concurency in Practice

    38/234

    GG 0$9$>1%43""(%4?@%-"$4)#4(

    +2#/5"(/("9(/)2"($:/$J()?6#)213)3%:3.?$JJ(4)#%

  • 8/13/2019 Java Concurency in Practice

    39/234

    GS

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%

  • 8/13/2019 Java Concurency in Practice

    40/234

    GU 0$9$>1%43""(%4?@%-"$4)#4(

    @% )2($7/(%4(1J /?%42"1%#*$)#1%W )2(41,5#.("W5"14(//1"W$%: "3%)#,(4$%:1 /1,(:16%"#

  • 8/13/2019 Java Concurency in Practice

    41/234

    GL

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%

  • 8/13/2019 Java Concurency in Practice

    42/234

  • 8/13/2019 Java Concurency in Practice

    43/234

    GV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%W $% $.#(% ,()21: #/ 1%( 621/( 7(2$9#1" #/ %1) J3..? /5(4#J#(: 7? >D +2#/ #%4.3:(/

    ,()21:/#%

    1)2("

    4.$//(/

    $/

    6(..

    $/

    19(""#:($7.(

    ,()21:/

    b%(#)2("

    G94/$.&%1"

    %4"$0c#%

    >#)/(.JD

    -$//#%?/'/.?+F??%8/&4.:*.84#N*6*)*&'*.%=3'">*A!"#$%!"%&'()

    G)M04* *0$## =84#L#*$G& WG)M04* =84#L#*$G&UL/&".'2)9*& #2)9*&V W

    #2)9*&+9&64#.&954#.&"&9U"&? L/&".54#.&"&9UV W

    G)M04* /24; 2"L/&".UL/&". &V W;2'23&.84"6U&V[

    \\V[

    \\

    LADA@AC"6*$%&3.)('./%&-)"'./'*3

    =84#L#*$G& #..3/)"$)(/ $% #,51")$%) /5(4#$.4$/( 1J (/4$5( 62(% )2(.84# "(J("(%4(/ (/4$5(/:3"#%

  • 8/13/2019 Java Concurency in Practice

    45/234

    G\

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%1%%(4)#9#)?cD2""&*.42"

    17[(4)/D+2(08!>/5(4#J#4$)#1%:1(/%1)"(K3#"()2$)D2""&*.42"17[(4)/7()2"($:/$J(Df\g

    @%)?5#4$./("9("$55.#4$)#1%/W

    $)2"($:$4K3#"(/$41%%(4)#1%J"1,)2(511.W3/(/#)J1"5"14(//#%

  • 8/13/2019 Java Concurency in Practice

    46/234

    S] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4LA^AJ:)*"0$%&6/&*5*&.%62%'"?-)/5/./#*"&0N*6*)*&'*H")/"Y?*3AG)M04* 4". 02$;=8&19CUD200&*.42"R1"43$0T *$";4;$.V W

    '29.&;'&.R1"43$0T $"43$0#[4". ")3@$49# ] Z[1"43$0 *$";4;$.& ] ")00[

    XX $"43$0# *2"%4"&; .2 3&.82;e ;2"m. 0&. .8&3 *$G&Y$"43$0# ] "&? =9&&'&.R1"43$0TU"&? 'G&*4H&";&9D23G$9$.29UVV[$"43$0#+$;;100U*$";4;$.V[%29 U1"43$0 $ h $"43$0#V W

    4% U*$";4;$.& ]] ")00 nn Y*$";4;$.&+4#@2.&".4$0F$.&U$VV*$";4;$.& ] $[&0#& W

    $9C+02$;U"&? 1"43$0@$49U*$";4;$.&e $VV[__")3@$49#[*$";4;$.& ] ")00[

    \\9&.)9" ")3@$49#[

    \

    Z$#%)$#%#%

  • 8/13/2019 Java Concurency in Practice

    47/234

    SC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%

  • 8/13/2019 Java Concurency in Practice

    48/234

    SG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4LA@@A,55(."Y?*$?"33;(/?.E(.%6K(."Y?*9&0*)?+/&4EY]*'.3AbI33).$M0&G)M04* %4"$0 *0$## =89&&'.226 W

    G94/$.& %4"$0 '&.R'.94"6T #.226 ] "&? E$#8'&.R'.94"6TUV[

    G)M04* =89&&'.226UV W#.226+$;;UdF2&dV[#.226+$;;Ud5$997dV[#.226+$;;UdD)907dV[

    \

    G)M04* M220&$" 4#'.226&U'.94"6 "$3&V W9&.)9" #.226+*2".$4"#U"$3&V[

    \\

    !(4$3/(5"1

  • 8/13/2019 Java Concurency in Practice

    49/234

    SS

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CL!>2$5)("SDF2$"#%

  • 8/13/2019 Java Concurency in Practice

    50/234

    SU 0$9$>1%43""(%4?@%-"$4)#4(

    @%J$4)W #J)2(E20;&9 #%=#/)#%

  • 8/13/2019 Java Concurency in Practice

    51/234

  • 8/13/2019 Java Concurency in Practice

    52/234

    SQ 0$9$>1%43""(%4?@%-"$4)#4(

    LAVAWAC:")/&4EY]*'.3C"6*?+

    E2(%(9("?13$4K3#"($"(J("(%4()1$%17[(4)W?13/213.:O%1662$)?13$"($..16(:)1:16#)2 #)D81?13%((:)1

    $4K3#"($ .14O7(J1"(3/#%

  • 8/13/2019 Java Concurency in Practice

    53/234

    SV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%

  • 8/13/2019 Java Concurency in Practice

    54/234

    SX 0$9$>1%43""(%4?@%-"$4)#4(

    ,$:( $)1,#4D H% )2( 1)2(" 2$%:W #J )2( 4.$// :1(/ %1) #,51/( $%? /342 41%/)"$#%)/W 6( ,$? 7( $7.( )1 "(.$B

    (%4$5/3.$)#1%1"/("#$.#*$)#1%"(K3#"(,(%)/)117)$#%*&0*&.E>*)"./%&3

    >.$//#%9$"#$%)/$%:,()21:51/)41%:#)#1%/41%/)"$#%)2(9$.#:/)$)(/$%:/)$)()"$%/#)#1%/J1"$%17[(4)DF1,(17[(4)/

    $./12$9(,()21:/6#)2/)$)(7$/(:5"(41%:#)#1%/DM1"(B$,5.(W?134$%%1)"(,19($% #)(,J"1,$%(,5)?K3(3(d$

    K3(3(,3/)7(#%)2(^%1%(,5)? /)$)(7(J1"(?134$%"(,19($%(.(,(%)DH5("$)#1%/6#)2/)$)(7$/(:5"(41%:#)#1%/

    $"(4$..(:/)$)(:(5(%:(%)f>-0SgD

    @% $ /#%

  • 8/13/2019 Java Concurency in Practice

    55/234

  • 8/13/2019 Java Concurency in Practice

    56/234

    U] 0$9$>1%43""(%4?@%-"$4)#4(

    #%)("J$4( $/ $ /?%42"1%#*(: ,()21: )2$) J1"6$":/ )2( "(K3(/) )1 )2( 3%:(".?#%2$5)(" CC /216/ 216 )1 #,5"19( /4$.$7#.#)? )2"13

  • 8/13/2019 Java Concurency in Practice

    57/234

    UC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%13%)#%

  • 8/13/2019 Java Concurency in Practice

    58/234

    UG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4MAMAK%&/.%)Y"3*0H*:/'?*J)"'?*5*&."./%&Ab=89&$;'$%&G)M04* *0$## F2"4.29B&84*0&=9$*C&9 W

    bH)$9;&;K7Ud.84#dVG94/$.& %4"$0 F$GR'.94"6e F).$M0&@24".T 02*$.42"#[

    G)M04* F2"4.29B&84*0&=9$*C&9UF$GR'.94"6e F).$M0&@24".T 02*$.42"#V W

    .84#+02*$.42"# ] ;&&GD2G7U02*$.42"#V[\

    G)M04* #7"*892"4:&; F$GR'.94"6e F).$M0&@24".T 6&.52*$.42"#UV W9&.)9" ;&&GD2G7U02*$.42"#V[

    \

    G)M04* #7"*892"4:&; F).$M0&@24". 6&.52*$.42"U'.94"6 4;V WF).$M0&@24". 02* ] 02*$.42"#+6&.U4;V[9&.)9" 02* ]] ")00 S ")00 h "&? F).$M0&@24".U02*V[

    \

    G)M04* #7"*892"4:&; /24; #&.52*$.42"U'.94"6 4;e 4". -e 4". 7V WF).$M0&@24". 02* ] 02*$.42"#+6&.U4;V[4% U02* ]] ")00V

    .892? "&? I00&6$0196)3&".L-*&G.42"Ud,2 #)*8 IAh d _ 4;V[02*+- ] -[02*+7 ] 7[

    \

    G94/$.& #.$.4* F$GR'.94"6e F).$M0&@24".T ;&&GD2G7UF$GR'.94"6e F).$M0&@24".T 3V W

    F$GR'.94"6e F).$M0&@24".T 9)0. ]"&? E$#8F$GR'.94"6e F).$M0&@24".TUV[

    %29 U'.94"6 4; h 3+C&7'&.UVV9)0.+G).U4;e "&? F).$M0&@24".U3+6&.U4;VVV[

    9&.)9" D200&*.42"#+)"32;4%4$M0&F$GU9)0.V[\

    \

    G)M04* *0$## F).$M0&@24". W Xc 54#.4"6 i+p cX \

    2/3./&4MAVAK(."Y?*-%/&.$?"33C/5/?").%>$/$+$?.+@24".A

    b,2.=89&$;'$%&G)M04* *0$## F).$M0&@24". W

    G)M04* 4". -e 7[

    G)M04* F).$M0&@24".UV W - ] Z[ 7 ] Z[ \G)M04* F).$M0&@24".UF).$M0&@24". GV W

    .84#+- ] G+-[

    .84#+7 ] G+7[\

    \

    MALA@A=1"5>?*TH*:/'?*J)"'

  • 8/13/2019 Java Concurency in Practice

    59/234

    US

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%+

    %6

    .:*

    2%'"./%&

    C*.

    ,&3.*"0

    %6

    "`2/#*`

    E&*A

    G)M04* F$GR'.94"6e @24".T 6&.52*$.42"#UV W9&.)9" D200&*.42"#+)"32;4%4$M0&F$GU

    "&? E$#8F$GR'.94"6e @24".TU02*$.42"#VV[\

    MALADA,&0*>*&0*&.C.".*H")/"Y?*3

    +2(:(.(

  • 8/13/2019 Java Concurency in Practice

    60/234

    UU 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4MA^A[*?*4"./&4J:)*"0C"6*.+.%K(?./>?*9&0*)?+/&4C.".*H")/"Y?*3AG)M04* *0$## B4#)$0D23G2"&". W

    G94/$.& %4"$0 54#.Rl&754#.&"&9T C&754#.&"&9#] "&? D2G7J"P94.&199$754#.Rl&754#.&"&9TUV[

    G94/$.& %4"$0 54#.RF2)#&54#.&"&9T 32)#&54#.&"&9#] "&? D2G7J"P94.&199$754#.RF2)#&54#.&"&9TUV[

    G)M04* /24; $;;l&754#.&"&9Ul&754#.&"&9 04#.&"&9V WC&754#.&"&9#+$;;U04#.&"&9V[

    \

    G)M04* /24; $;;F2)#&54#.&"&9UF2)#&54#.&"&9 04#.&"&9V W32)#&54#.&"&9#+$;;U04#.&"&9V[

    \

    G)M04* /24; 9&32/&l&754#.&"&9Ul&754#.&"&9 04#.&"&9V WC&754#.&"&9#+9&32/&U04#.&"&9V[

    \

    G)M04* /24; 9&32/&F2)#&54#.&"&9UF2)#&54#.&"&9 04#.&"&9V W32)#&54#.&"&9#+9&32/&U04#.&"&9V[

    \\

    MALALAB:*&[*?*4"./%&S"/?3

    Z1/)

    41,51/#)(

    4.$//(/

    $"(

    %1)

    $/

    /#,5.(

    $/

    B4#)$0D23G2"&".e

    )2(?

    2$9(

    #%9$"#$%)/

    )2$)

    "(.$)(

    )2(#"

    41,51%(%)

    /)$)(

    9$"#$7.(/D ,)3M&9N$"6& #% =#/)#%

  • 8/13/2019 Java Concurency in Practice

    61/234

    UL

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%

  • 8/13/2019 Java Concurency in Practice

    62/234

    UQ 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4MA@@AJ:)*"03"6*K(."Y?*-%/&.$?"33Ab=89&$;'$%&G)M04* *0$## '$%&@24". W

    bH)$9;&;K7Ud.84#dV G94/$.& 4". -e 7[

    G94/$.& '$%&@24".U4".fg $V W .84#U$fZge $f^gV[ \

    G)M04* '$%&@24".U'$%&@24". GV W .84#UG+6&.UVV[ \

    G)M04* '$%&@24".U4". -e 4". 7V W

    .84#+- ] -[.84#+7 ] 7[\

    G)M04* #7"*892"4:&; 4".fg 6&.UV W9&.)9" "&? 4".fg W -e 7 \[

    \

    G)M04* #7"*892"4:&; /24; #&.U4". -e 4". 7V W.84#+- ] -[.84#+7 ] 7[

    \\

    '$%&@24". #%=#/)#%

  • 8/13/2019 Java Concurency in Practice

    63/234

    UV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%

  • 8/13/2019 Java Concurency in Practice

    64/234

    UX 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4MA@MAP%&.:)*"03"6*F..*5>..%,5>?*5*&.-(./6"Y3*&.A!"#$%!"%&'()

    b,2.=89&$;'$%&G)M04* *0$## 54#.E&0G&9RLT W

    G)M04* 54#.RLT 04#. ]D200&*.42"#+#7"*892"4:&;54#.U"&? 199$754#.RLTUVV[

    +++

    G)M04* #7"*892"4:&; M220&$" G).I%1M#&".UL -V WM220&$" $M#&". ] Y04#.+*2".$4"#U-V[4% U$M#&".V

    04#.+$;;U-V[9&.)9" $M#&".[

    \\

    E2? 613.:%`) )2#/ 61"Ok RJ)(" $..WG).I%1M#&". #/#7"*892"4:&;W "#

  • 8/13/2019 Java Concurency in Practice

    65/234

    U\

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CQ!>2$5)("UD

    >1,51/#%

  • 8/13/2019 Java Concurency in Practice

    66/234

    L] 0$9$>1%43""(%4?@%-"$4)#4(

    +1,$O(,$))("/61"/(W13" #%)3#)#1%,$?1J)(%7(6"1%

  • 8/13/2019 Java Concurency in Practice

    67/234

    LC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%1,,1% 41,513%: $4)#1%/ 1% 41..(4)#1%/ #%4.3:( #)("$)#1% b"(5($)(:.? J()42 (.(,(%)/ 3%)#. )2(

    41..(4)#1% #/ (B2$3/)(:cW %$9#

  • 8/13/2019 Java Concurency in Practice

    68/234

    LG 0$9$>1%43""(%4?@%-"$4)#4(

    !(4$3/( )2( /?%42"1%#*(: 41..(4)#1%/ 41,,#) )1 $ /?%42"1%#*$)#1% 51.#4? )2$) /3551")/ 4.#(%)/#:( .14O#%./%&

    E(3/(B&*.29J1")2(/$O(1J4.$"#)?#%,$%?1J13"(B$,5.(/W(9(%)213

  • 8/13/2019 Java Concurency in Practice

    69/234

  • 8/13/2019 Java Concurency in Practice

    70/234

    LU 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VAWA,.*)"./%&7/00*&8/.:/&C.)/&4$%&'".*&"./%&A!"#$%!"%&'()

    G)M04* *0$## E4;;&"I.&9$.29 WbH)$9;&;K7Ud.84#dVG94/$.& %4"$0 '&.RI".&6&9T #&. ] "&? E$#8'&.RI".&6&9TUV[

    G)M04* #7"*892"4:&; /24; $;;UI".&6&9 4V W #&.+$;;U4V[ \

    G)M04* #7"*892"4:&; /24; 9&32/&UI".&6&9 4V W #&.+9&32/&U4V[ \

    G)M04* /24; $;;=&"=84"6#UV WN$";23 9 ] "&? N$";23UV[%29 U4". 4 ] Z[ 4 R ^Z[ 4__V

    $;;U9+"&-.I".UVV['7#.&3+2).+G94".0"UdALK!Hh $;;&; .&" &0&3&".# .2 d _ #&.V[

    \\

    @)("$)#1% #/ $./1 #%:#"(4).? #%91O(: 7? )2( 41..(4)#1%`/ 8$#8D2;& $%: &()$0# ,()21:/W 62#42 ,$? 7( 4$..(: #J )2(

    41..(4)#1% #/3/(:$/$%(.(,(%)1"O(?1J$%1)2("41..(4)#1%DF#,#.$".?W)2(*2".$4"#100W9&32/&100W$%:9&.$4"100

    ,()21:/W$/6(..$/)2(41%/)"34)1"/)2$))$O(41..(4)#1%/$"($"

  • 8/13/2019 Java Concurency in Practice

    71/234

    LL

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    72/234

    LQ 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VAZAD2"*)99&".F$G,&.*)6"'*AG)M04* 4".&9%$*& D2"*)99&".F$GRleBT &-.&";# F$GRleBT W

    XX I"#&9. 4".2 3$G 2"07 4% "2 /$0)& 4# 3$GG&; %923 lB G).I%1M#&".Ul C&7e B /$0)&V[

    XX N&32/& 2"07 4% l 4# 3$GG&; .2 BM220&$" 9&32/&Ul C&7e B /$0)&V[

    XX N&G0$*& /$0)& 2"07 4% l 4# 3$GG&; .2 20;B$0)&M220&$" 9&G0$*&Ul C&7e B 20;B$0)&e B "&?B$0)&V[

    XX N&G0$*& /$0)& 2"07 4% l 4# 3$GG&; .2 #23& /$0)&B 9&G0$*&Ul C&7e B "&?B$0)&V[

    \

    H79#13/.?W )2("( #/ /1,( 41/) )1 415?#%

  • 8/13/2019 Java Concurency in Practice

    73/234

    LV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    74/234

    LX 0$9$>1%43""(%4?@%-"$4)#4(

    M1",3)$7.(17[(4)/W5"1:34("41%/3,(":(/#

  • 8/13/2019 Java Concurency in Practice

    75/234

    L\

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    76/234

    Q] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VA@_AN*3.%)/&4.:*,&.*))(>.*0C.".(33%"3P%..%C8"??%8.:*,&.*))(>.AG)M04* *0$## =$#CN)""$M0& 43G0&3&".# N)""$M0& W

    K02*C4"6O)&)&R=$#CT ()&)&[+++G)M04* /24; 9)"UV W

    .97 WG92*#=$#CU()&)&+.$C&UVV[

    \ *$.*8 UI".&99)G.&;L-*&G.42" &V WXX 9.29& 4".&99)G.&; #.$.)#=89&$;+*)99&".=89&$;UV+4".&99)G.UV[

    \\\

    VAVAC+&':)%&/O*)3

    !.14O#%2$5)("

    CUD

    R../?%42"1%#*("//2$"(4(")$#%/)"34)3"$.5"15(")#(/e)2(?(%4$5/3.$)(/)$)()2$):()(",#%(/62()2(")2"($:/$""#9#%

  • 8/13/2019 Java Concurency in Practice

    77/234

    QC

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    78/234

    QG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VA@DA93/&4

  • 8/13/2019 Java Concurency in Practice

    79/234

    QS

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    80/234

    QU 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VA@MA93/&4'&3$G829&.%;%(&0"$%??*'./%&AG)M04* *0$## K2)";&;E$#8'&.R=T W

    G94/$.& %4"$0 '&.R=T #&.[G94/$.& %4"$0 '&3$G829& #&3[

    G)M04* K2)";&;E$#8'&.U4". M2)";V W.84#+#&. ] D200&*.42"#+#7"*892"4:&;'&.U"&? E$#8'&.R=TUVV[#&3 ] "&? '&3$G829&UM2)";V[

    \

    G)M04* M220&$" $;;U= 2V .892?# I".&99)G.&;L-*&G.42" W#&3+$*()49&UV[M220&$" ?$#1;;&; ] %$0#&[.97 W

    ?$#1;;&; ] #&.+$;;U2V[9&.)9" ?$#1;;&;[

    \%4"$007 W

    4% UY?$#1;;&;V#&3+9&0&$#&UV[

    \\

    G)M04* M220&$" 9&32/&UJM`&*. 2V WM220&$" ?$#N&32/&; ] #&.+9&32/&U2V[4% U?$#N&32/&;V

    #&3+9&0&$#&UV[9&.)9" ?$#N&32/&;[

    \\

    !$""#("/$"(1J)(%3/(: #%/#,3.$)#1%/W62("( )2(61"O)14$.43.$)(1%(/)(54$%7(:1%( #%5$"$..(.73)$.. )2(61"O

    $//14#$)(: 6#)2 $ -N$%:,(,1"?"(/13"4(/D

    R%1)2("J1",1J7$""#(" #/L-*8$"6&9W$)615$")?7$""#(" #%62#42)2(5$")#(/(B42$%

  • 8/13/2019 Java Concurency in Practice

    81/234

    QL

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    82/234

    QQ 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4VA@WA,&/./"?$"':*F..*5>.93/&4!"#$%"&"&0C+&':)%&/O"./%&A

    G)M04* 4".&9%$*& D23G).$M0&R1e BT WB *23G).&U1 $96V .892?# I".&99)G.&;L-*&G.42"[

    \

    G)M04* *0$## L-G&"#4/&

  • 8/13/2019 Java Concurency in Practice

    83/234

    QV

    LGXX!LGXV!LGXQ!LGU\!LGS]!LGG\!LG]]!LCUX!U\CQ!UVGG!UVGC!UVG]!UVC\!UL\U!UL\S!ULQ\!ULQX!ULQV!UL

    QQ!ULQL!ULQU!UUGV!UUGQ!UUC]!UU]\!USUL!UGCX!UGCV!UGCQ!UGCL!SQSQ!SQSL!SUQ\!SUQX!SUQL!SULL!SULU

    !SULS!SUU\!SGGC!SGG]!SGC\!SGCU!S]L\!S]LX!S]LV!GLSL!GLSU!GC\]!GCX\!GCXX!G CV!>2$5)("LD!3#.:#%

  • 8/13/2019 Java Concurency in Practice

    84/234

  • 8/13/2019 Java Concurency in Practice

    85/234

  • 8/13/2019 Java Concurency in Practice

    86/234

    V] 0$9$>1%43""(%4?@%-"$4)#4(

    i13 413.: 6"#)( $ )2"($:/$J( 5"1

  • 8/13/2019 Java Concurency in Practice

    87/234

    VCL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CV!>2$5)("LD!3#.:#%.?@(,:D +$/OPB(43)#1%

    =>.?@(,;D >$%4(..$)#1%$%:F23):16%

    =>.?@(,

  • 8/13/2019 Java Concurency in Practice

    88/234

  • 8/13/2019 Java Concurency in Practice

    89/234

    VSL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    fCg@%/1,(/#)3$)#1%/W/(K3(%)#$.5"14(//#%2$5)("\D

    WA@ADA=1>?/'/.?+$)*"./&4J:)*"036%)J"3

  • 8/13/2019 Java Concurency in Practice

    90/234

  • 8/13/2019 Java Concurency in Practice

    91/234

    VLL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    2/3./&4WAMAB*YC*)#*)93/&4"J:)*"0-%%?A*0$## =$#CL-&*).42"P&M'&9/&9 W

    G94/$.& #.$.4* %4"$0 4". ,=ENL1A' ] ^ZZ[G94/$.& #.$.4* %4"$0 L-&*).29 &-&*

    ] L-&*).29#+"&?

  • 8/13/2019 Java Concurency in Practice

    92/234

    VQ 0$9$>1%43""(%4?@%-"$4)#4(

    $%:?13)2#%O?13,#-N$%:,(,1"?"(/13"4(/DR%:3/#%

  • 8/13/2019 Java Concurency in Practice

    93/234

    VVL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    7()6((%DF#%4(L-&*).29/5"19#:($/("9#4()1$55.#4$)#1%/W)2(?/213.:7($7.()17(/23):16%$/6(..W71)2

  • 8/13/2019 Java Concurency in Practice

    94/234

    VX 0$9$>1%43""(%4?@%-"$4)#4(

    fQg+#,(":1(/2$9(/3551") J1"/42(:3.#%?%/."Y?*-")"??*?/35

    +2(L-&*).29J"$,(61"O,$O(/#)($/?)1/5(4#J?$%(B(43)#1%51.#4?W73)#%1":(")13/($%L-&*).29W?132$9()17(

    $7.()1:(/4"#7(?13")$/O$/$N)""$M0&D@%,1/)/("9("$55.#4$)#1%/W)2("(#/$%179#13/)$/O713%:$"?e$/#%

  • 8/13/2019 Java Concurency in Practice

    95/234

    V\L!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    R.(//$%%1?#%$%4(..$)#1%#/419("(:#%2$5)("VDc

  • 8/13/2019 Java Concurency in Practice

    96/234

    X] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4WA@@AD$00$M0&"&0

  • 8/13/2019 Java Concurency in Practice

    97/234

    XCL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    RJ3")2("5"17.(,6#)2:#9#:#%

  • 8/13/2019 Java Concurency in Practice

    98/234

    XG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4WA@MAO)&)&4"6

  • 8/13/2019 Java Concurency in Practice

    99/234

    XSL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/ CX!>2$5)("QD+$/OPB(43)#1%

    R /(41%:$"? 5"17.(, 62(% 3/#%2$5)("VcW#)4$%7()(",#%$)(:($".?/1$/%1))141%/3,((B4(//#9(

    "(/13"4(/D+2#/)(42%#K3(#/3/(:#%=#/)#%?*TFJ)"#*?N*3*)#"./%&3-%)."?

    +2()#,(73:

  • 8/13/2019 Java Concurency in Practice

    100/234

  • 8/13/2019 Java Concurency in Practice

    101/234

    XLL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    $:">.*)ZA$"&'*??"./%&"&0C:(.0%8&@) #/($/? )1/)$") )$/O/$%: )2"($:/DZ1/)1J )2( )#,(6($..16 )2(, )1:(4#:(62(% )1/)157? .())#%

  • 8/13/2019 Java Concurency in Practice

    102/234

    XQ 0$9$>1%43""(%4?@%-"$4)#4(

    R )$/O )2$)6$%)/ )17(4$%4(..$7.(,3/)2$9($4$%4(..$)#1% 51.#4? )2$) /5(4#J#(/ )2(^216^W^62(%^W$%:^62$)^1J

    4$%4(..$)#1% 2161)2("41:(4$%"(K3(/)4$%4(..$)#1%W62(%)2()$/O42(4O/62()2("4$%4(..$)#1%2$/7((%"(K3(/)(:W

    $%:62$)$4)#1%/)2()$/O)$O(/#%"(/51%/()1$4$%4(..$)#1%"(K3(/)D

    >1%/#:(" )2( "($.61".: (B$,5.( 1J /)155#%

  • 8/13/2019 Java Concurency in Practice

    103/234

    XVL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    4".&99)G.,()21:#%)(""35)/)2()$"./%&K*.:%03/&=89&$;AG)M04* *0$## =89&$; W

    G)M04* /24; 4".&99)G.UV W +++ \G)M04* M220&$" 4#I".&99)G.&;UV W +++ \G)M04* #.$.4* M220&$" 4".&99)G.&;UV W +++ \+++

    \

    @J$)2"($:#/#%)(""35)(:62(%#)#/%1)7.14O(:W#)/#%)(""35)(:/)$)3/#//()W$%:#)#/35)1)2($4)#9#)?7(#%

  • 8/13/2019 Java Concurency in Practice

    104/234

    XX 0$9$>1%43""(%4?@%-"$4)#4(

    6#)2#) (#)2(")2"16I".&99)G.&;L-*&G.42"1""(/)1"()2(#%)(""35)(:/)$)3/7?4$..#%1:()2$)

    :1(/%`)16%)2()2"($:bJ1"$)2"($:511.W$%?41:(13)/#:(1J)2()2"($:511. #,5.(,(%)$)#1%c/213.:7(4$"(J3.)1

    5"(/("9()2( #%)(""35)(:/)$)3//1)2$))2(16%#%

  • 8/13/2019 Java Concurency in Practice

    105/234

    X\L!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    I".&99)G.&;L-*&G.42" 1" 1)2("6#/( #%:#4$)#%%&0/&4.%,&.*))(>./%&

    R/ ,(%)#1%(: #% F(4)#1% LDUW 62(% ?13 4$.. $% #%)(""35)#7.( 7.14O#%

  • 8/13/2019 Java Concurency in Practice

    106/234

    \] 0$9$>1%43""(%4?@%-"$4)#4(

    (JJ#4#(%4?$%:"(/51%/#9(%(//D @J?132$9(2#.%&";%))%8*0J:)*"0A!"#$%!"%&'()

    G94/$.& #.$.4* %4"$0 '*8&;)0&;L-&*).29'&9/4*& *$"*&0L-&* ] +++[

    G)M04* #.$.4* /24; .43&;N)"UN)""$M0& 9e02"6 .43&2).e =43&!"4. )"4.V W

    %4"$0 =89&$; .$#C=89&$; ] =89&$;+*)99&".=89&$;UV[*$"*&0L-&*+#*8&;)0&U"&? N)""$M0&UV W

    G)M04* /24; 9)"UV W .$#C=89&$;+4".&99)G.UV[ \\e .43&2).e )"4.V[

    9+9)"UV[\

    M3")2("W#J)2()$/O#/%1)"(/51%/#9()1#%)(""35)#1%W.43&;N)"6#..%1)"()3"%3%)#.)2()$/OJ#%#/2(/W62#42,$?7(.1%

  • 8/13/2019 Java Concurency in Practice

    107/234

    \CL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    =#/)#%

  • 8/13/2019 Java Concurency in Practice

    108/234

    \G 0$9$>1%43""(%4?@%-"$4)#4(

    $%1)2(".1/#%2$5)("CSD

    N&$;&9=89&$;#%=#/)#%3(?"./&4P%&3."&0")0$"&'*??"./%&8/.:,&?.$#C%29

    +2( )(42%#K3( 3/(: #%N&$;&9=89&$; )1 (%4$5/3.$)( %1%/)$%:$": 4$%4(..$)#1% 4$% 7( "(J#%(: 3/#%3/)1,4$%4(..$)#1%41:(4$%5("J1", .1

  • 8/13/2019 Java Concurency in Practice

    109/234

    \SL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    N&$;&9=89&$;(%4$5/3.$)(/4$%4(..$)#1%1J/14O()3/#%3(?"./&4P%&3."&0")0$"&'*??"./%&/&"=89&$;Y+E#*))/0/&4I".&99)G.A

    G)M04* *0$## N&$;&9=89&$; &-.&";# =89&$; WG94/$.& %4"$0 '2*C&. #2*C&.[G94/$.& %4"$0 I"G).'.9&$3 4"[

    G)M04* N&$;&9=89&$;U'2*C&. #2*C&.V .892?# IJL-*&G.42" W.84#+#2*C&. ] #2*C&.[.84#+4" ] #2*C&.+6&.I"G).'.9&$3UV[

    \

    G)M04* /24; 4".&99)G.UV W.97 W

    #2*C&.+*02#&UV[\*$.*8 UIJL-*&G.42" 46"29&;V W \%4"$007 W

    #)G&9+4".&99)G.UV[\

    \

    G)M04* /24; 9)"UV W.97 W

    M7.&fg M)% ] "&? M7.&fK!

  • 8/13/2019 Java Concurency in Practice

    110/234

    \U 0$9$>1%43""(%4?@%-"$4)#4(

    ZADA@A=1"5>?*TF2%44/&4C*)#/'*

    Z1/) /("9("$55.#4$)#1%/ 3/( .1

  • 8/13/2019 Java Concurency in Practice

    111/234

    \LL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    2/3./&4ZA@LA-)%0('*)$%&3(5*)2%44/&4C*)#/'*8/.:P%C:(.0%8&C(>>%).A

    G)M04* *0$## 526P94.&9 WG94/$.& %4"$0 K02*C4"6O)&)&R'.94"6T ()&)&[G94/$.& %4"$0 5266&9=89&$; 0266&9[

    G)M04* 526P94.&9UP94.&9 ?94.&9V W

    .84#+()&)& ] "&? 54"C&;K02*C4"6O)&)&R'.94"6TUD1@1DI=rV[.84#+0266&9 ] "&? 5266&9=89&$;U?94.&9V[\

    G)M04* /24; #.$9.UV W 0266&9+#.$9.UV[ \

    G)M04* /24; 026U'.94"6 3#6V .892?# I".&99)G.&;L-*&G.42" W()&)&+G).U3#6V[

    \

    G94/$.& *0$## 5266&9=89&$; &-.&";# =89&$; WG94/$.& %4"$0 @94".P94.&9 ?94.&9[+++G)M04* /24; 9)"UV W

    .97 W?840& U.9)&V

    ?94.&9+G94".0"U()&)&+.$C&UVV[

    \ *$.*8UI".&99)G.&;L-*&G.42" 46"29&;V W\ %4"$007 W

    ?94.&9+*02#&UV[\

    \\

    \

    M1"$/("9#4( .#O(526P94.&9)17(3/(J3. #%5"1:34)#1%W6(%((:$6$?)1)(",#%$)()2( .1>%)..%.:*2%44/&4C*)#/'*A

    G)M04* /24; 026U'.94"6 3#6V .892?# I".&99)G.&;L-*&G.42" W4% UY#8).;2?"N&().&;V

    ()&)&+G).U3#6V[&0#&

    .892? "&? I00&6$0'.$.&L-*&G.42"Ud0266&9 4# #8). ;2?"dV[\

    +2(6$?

    )1

    5"19#:(

    "(.#$7.(

    /23):16%

    J1"

    526P94.&9#/

    )1

    J#B

    )2(

    "$4(

    41%:#)#1%W

    62#42

    ,($%/

    ,$O#%1%43""(%4?@%-"$4)#4(

    ZADADAL-&*).29'&9/4*&C:(.0%8&

    @%F(4)#1%QDGDUW6(/$6)2$)L-&*).29'&9/4*&1JJ("/)616$?/)1/23):16%e

  • 8/13/2019 Java Concurency in Practice

    113/234

  • 8/13/2019 Java Concurency in Practice

    114/234

    \X 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4ZA@\A-)%0('*)J:)*"06%)I";&-4"6'&9/4*&AG)M04* *0$## D9$?0&9=89&$; &-.&";# =89&$; W

    G)M04* /24; 9)"UV W.97 W

    *9$?0U922.V[\ *$.*8 UI".&99)G.&;L-*&G.42" &V W Xc %$00 .892)68 cX \%4"$007 W

    ?840& U.9)&V W.97 W

    ()&)&+G).U@JI'J,V[

    M9&$C[\ *$.*8 UI".&99)G.&;L-*&G.42" &^V W Xc 9&.97 cX \\

    \\

    G94/$.& /24; *9$?0U

  • 8/13/2019 Java Concurency in Practice

    115/234

    \\L!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    )(42%#K3()161"OW)2()$/O/,3/)5"(/("9()2()2"($:`/#%)(""35)(:/)$)3/62(%)2(?"()3"%W62#426(..7(2$9(:)$/O/

    6#..:1$%?6$?D

    2/3./&4ZAD@AL-&*).29'&9/4*&.:".c**>3J)"'

  • 8/13/2019 Java Concurency in Practice

    116/234

    ]] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4ZADDA93/&4=N$*C4"6L-&*).29'&9/4*&.%C"#*9&6/&/3:*0J"3

  • 8/13/2019 Java Concurency in Practice

    117/234

    C]CL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/C\!>2$5)("VD>$%4(..$)#1%$%:F23):16%

    )2"($:(B#)/$7%1",$..?)2(J"$,(61"O #/#%J1",(:1J)2#/$%:4$%)$O(41""(4)#9($4)#1%D+2#/ #/1%(1J)2(J(6)#,(/

    62(%?13,#./%&7"&0?*)3

    +2( 5"(9#13/ /(4)#1% 1JJ("(: $ 5"1$4)#9( $55"1$42 )1 )2( 5"17.(, 1J 3%42(4O(: (B4(5)#1%/D +2( +2"($: R-@ $./1

    5"19#:(/ )2( !"*$)68.L-*&G.42"E$";0&9 J$4#.#)?W 62#42 .()/ ?13 :()(4) 62(% $ )2"($: :#(/ :3( )1 $% 3%4$3

  • 8/13/2019 Java Concurency in Practice

    118/234

  • 8/13/2019 Java Concurency in Practice

    119/234

  • 8/13/2019 Java Concurency in Practice

    120/234

    ]U 0$9$>1%43""(%4?@%-"$4)#4(

    $:">.*)\AF>>?+/&4J:)*"0-%%?3>2$5)(" Q #%)"1:34(: )2( )$/O (B(43)#1% J"$,(61"OW 62#42 /#,5.#J#(/ ,$%$2$5)("V419("(:/1,(1J

    )2( ,(//? :()$#./ 1J /("9#4( .#J(4?4.( )2$) $"#/( J"1, 3/#%

  • 8/13/2019 Java Concurency in Practice

    121/234

    C]LL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%

  • 8/13/2019 Java Concurency in Practice

    122/234

    ]Q 0$9$>1%43""(%4?@%-"$4)#4(

    ,1/).?41,53)$)#1%W @lHW1"/1,(41,7#%$)#1%k81)2(?"(K3#"($/4$"4("(/13"4(W/342$/$08!>41%%(4)#1%k@J?13

    2$9(:#JJ("(%)4$)(-N/3/#%

  • 8/13/2019 Java Concurency in Practice

    123/234

    C]VL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%

  • 8/13/2019 Java Concurency in Practice

    124/234

    ]X 0$9$>1%43""(%4?@%-"$4)#4(

    M1" 9("? .$"-.$?("W$%:(9(%)3$..?)1)2(4.#(%) (%$7.#%

  • 8/13/2019 Java Concurency in Practice

    125/234

    C]\L!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%

  • 8/13/2019 Java Concurency in Practice

    126/234

  • 8/13/2019 Java Concurency in Practice

    127/234

    CCCL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%

  • 8/13/2019 Java Concurency in Practice

    128/234

    CG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4\A^AJ:)*"0-%%?=1.*&0*08/.:2%44/&4"&0J/5/&4AG)M04* *0$## =434"6=89&$;@220 &-.&";# =89&$;@220L-&*).29 W

    G94/$.& %4"$0 =89&$;52*$0R52"6T #.$9.=43&] "&? =89&$;52*$0R52"6TUV[

    G94/$.& %4"$0 5266&9 026 ] 5266&9+6&.5266&9Ud=434"6=89&$;@220dV[G94/$.& %4"$0 1.234*52"6 ")3=$#C# ] "&? 1.234*52"6UV[G94/$.& %4"$0 1.234*52"6 .2.$0=43& ] "&? 1.234*52"6UV[

    G92.&*.&; /24; M&%29&L-&*).&U=89&$; .e N)""$M0& 9V W#)G&9+M&%29&L-&*).&U.e 9V[

    026+%4"&U'.94"6+%293$.Ud=89&$; x#h #.$9. x#de .e 9VV[#.$9.=43&+#&.U'7#.&3+"$"2=43&UVV[\

    G92.&*.&; /24; $%.&9L-&*).&UN)""$M0& 9e =892?$M0& .V W.97 W

    02"6 &";=43& ] '7#.&3+"$"2=43&UV[02"6 .$#C=43& ] &";=43& a #.$9.=43&+6&.UV[")3=$#C#+4"*9&3&".1";H&.UV[.2.$0=43&+$;;1";H&.U.$#C=43&V[026+%4"&U'.94"6+%293$.Ud=89&$; x#h &"; x#e .43&]x;"#de

    .e 9e .$#C=43&VV[\ %4"$007 W

    #)G&9+$%.&9L-&*).&U9e .V[\

    \

    G92.&*.&; /24; .&934"$.&;UV W.97 W

    026+4"%2U'.94"6+%293$.Ud=&934"$.&;h $/6 .43&]x;"#de.2.$0=43&+6&.UV X ")3=$#C#+6&.UVVV[

    \ %4"$007 W#)G&9+.&934"$.&;UV[

    \\

    \

    \AVA-")"??*?/O/&4N*'()3/#*F?4%)/.:53

    +2(5$

  • 8/13/2019 Java Concurency in Practice

    129/234

    CCSL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%$..("/1J

    G$9$00&0N&*)9#4/&4$%6$#) J1"$.. )2( "(/3.)/7?4"($)#%

  • 8/13/2019 Java Concurency in Practice

    130/234

    CU 0$9$>1%43""(%4?@%-"$4)#4(

    7(4$3/( )$/O/ /2$"( /1,(,3)$7.( /)$)(W/342$/ )2( /()1J /((%51/#)#1%/Dc @J,3.)#5.(5"14(//1"/$"($9$#.$7.(W )2#/

    413.:"(:34()2()#,(#))$O(/)1J#%:$/1.3)#1%D

    D2"*)99&".@)::0&'20/&9#%=#/)#%

  • 8/13/2019 Java Concurency in Practice

    131/234

    CCLL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/G]!>2$5)("XDR55.?#%

  • 8/13/2019 Java Concurency in Practice

    132/234

    CQ 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4\A@ZAN*3(?.Y*")/&42".':93*0Y+D2"*)99&".@)::0&'20/&9Ab=89&$;'$%&G)M04* *0$## B$0)&5$.*8R=T W

    bH)$9;&;K7Ud.84#dV G94/$.& = /$0)& ] ")00[G94/$.& %4"$0 D2)".A2?"5$.*8 ;2"& ] "&? D2)".A2?"5$.*8U^V[

    G)M04* M220&$" 4#'&.UV W9&.)9" U;2"&+6&.D2)".UV ]] ZV[

    \G)M04* #7"*892"4:&; /24; #&.B$0)&U= "&?B$0)&V W

    4% UY4#'&.UVV W/$0)& ] "&?B$0)&[;2"&+*2)".A2?"UV[

    \\

    G)M04* = 6&.B$0)&UV .892?# I".&99)G.&;L-*&G.42" W;2"&+$?$4.UV[#7"*892"4:&; U.84#V W

    9&.)9" /$0)&[\

    \\

    D2"*)99&".@)::0&'20/&9 :1(/ %1) :($. 6(.. 6#)2 )2( 4$/( 62("( )2("( #/ %1 /1.3)#1%e #J $.. 51//#7.( ,19(/ $%:

    51/#)#1%/2$9(

    7((%

    (9$.3$)(:

    $%:

    %1

    /1.3)#1%

    2$/

    7((%

    J13%:W

    #20/&6$#)/

    J1"(9("

    #%

    )2(

    4$..

    )1

    6&.'20).42"D+2(

    /(K3(%)#$.9("/#1%)(",#%$)(:62(% #)2$:(B2$3/)(:)2(/($"42/5$4(W73)

  • 8/13/2019 Java Concurency in Practice

    133/234

    CCVL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/GC!>2$5)("\D&N@R55.#4$)#1%/

    $:">.*)^AR9,F>>?/'"./%&3@J ?13`9( )"#(: )1 6"#)( (9(% $ /#,5.( &N@ $55.#4$)#1% 3/#%EIIJ>DI

    @7(.#(9(?134$%5"1

  • 8/13/2019 Java Concurency in Practice

    134/234

    CX 0$9$>1%43""(%4?@%-"$4)#4(

    F#%

  • 8/13/2019 Java Concurency in Practice

    135/234

    CC\L!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/GC!>2$5)("\D&N@R55.#4$)#1%/

    ^ADAC:%).)(&&/&4R9,J"3

  • 8/13/2019 Java Concurency in Practice

    136/234

    G] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4^A@A,5>?*5*&./&4670)89.0:0.0-#93/&4"&;

  • 8/13/2019 Java Concurency in Practice

    137/234

    CGCL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/GC!>2$5)("\D&N@R55.#4$)#1%/

    S/4()*^ADA$%&.)%?S?%88/.:C*>")".*K%0*?"&0H/*8EY]*'.3A

    ^ALA2%&4)(&&/&4R9,J"3

  • 8/13/2019 Java Concurency in Practice

    138/234

    GG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4^AVA2%&4)(&&/&4J"3

  • 8/13/2019 Java Concurency in Practice

    139/234

    CGSL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/GC!>2$5)("\D&N@R55.#4$)#1%/

    2$9#%

  • 8/13/2019 Java Concurency in Practice

    140/234

    GU 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4^AZA;"'>%)./&4$"&'*??"./%&X$%5>?*./%&P%./6/'"./%&X"&0-)%4)*33P%./6/'"./%&A$M#.9$*. *0$## K$*C692)";=$#CRBT 43G0&3&".# N)""$M0&e

  • 8/13/2019 Java Concurency in Practice

    141/234

    CGLL!-$")@@eF)"34)3"#%1%43""(%)R55.#4$)#1%/GC!>2$5)("\D&N@R55.#4$)#1%/

    41,5.()(/W ?13 2$9( )1 ?/.["."K%0*?3

    M"1, )2( 5("/5(4)#9( 1J )2( &N@W )2( F6#%

  • 8/13/2019 Java Concurency in Practice

    142/234

    GQ 0$9$>1%43""(%4?@%-"$4)#4(

    C(55")+

    &N@J"$,(61"O/$"(%($".?$.6$?/ #,5.(,(%)(:$//#%

  • 8/13/2019 Java Concurency in Practice

    143/234

  • 8/13/2019 Java Concurency in Practice

    144/234

    GX 0$9$>1%43""(%4?@%-"$4)#4(

    $:">.*)@_AF#%/0/&42/#*&*337"O")03+2("(#/1J)(%$)(%/#1%7()6((%/$J()?$%:.#9(%(//DE(3/(.14O#%

  • 8/13/2019 Java Concurency in Practice

    145/234

    CG\Q!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("C]DR91#:#%

  • 8/13/2019 Java Concurency in Practice

    146/234

    S] 0$9$>1%43""(%4?@%-"$4)#4(

    1h .9$"#%&9F2"&7U371**2)".e 72)91**2)".e ^ZV[Kh .9$"#%&9F2"&7U72)91**2)".e 371**2)".e jZV[

    E#)23%.34O?)#,#%

  • 8/13/2019 Java Concurency in Practice

    147/234

    CSCQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("C]DR91#:#%

  • 8/13/2019 Java Concurency in Practice

    148/234

    SG 0$9$>1%43""(%4?@%-"$4)#4(

    fSg+2(%((:)1"(.?1%15(%4$../$%:4$"(J3. .14O1":("#%

  • 8/13/2019 Java Concurency in Practice

    149/234

    CSSQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("C]DR91#:#%

  • 8/13/2019 Java Concurency in Practice

    150/234

    SU 0$9$>1%43""(%4?@%-"$4)#4(

    @%5"1

  • 8/13/2019 Java Concurency in Practice

    151/234

  • 8/13/2019 Java Concurency in Practice

    152/234

    SQ 0$9$>1%43""(%4?@%-"$4)#4(

    R91#: )2( )(,5)$)#1% )1 3/( )2"($: 5"#1"#)#(/W /#%4( )2(? #%4"($/( 5.$)J1", :(5(%:(%4( $%: 4$% 4$3/( .#9(%(//

    5"17.(,/DZ1/)41%43""(%)$55.#4$)#1%/4$%3/()2(:(J$3.)5"#1"#)?J1"$..)2"($:/D

    @_ALADA-%%)N*3>%&3/#*&*33

    H%( /)(5 "(,19(: J"1, /)$"9$)#1% #/ 511" "(/51%/#9(%(//W 62#42 #/ %1) 3%41,,1% #% &N@ $55.#4$)#1%/ 3/#%-N#%)(%/#9( 7$4O

  • 8/13/2019 Java Concurency in Practice

    153/234

    CSVQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    $:">.*)@@A-*)6%)5"&'*"&0C'"?"Y/?/.+H%(1J)2(5"#,$"?"($/1%/)13/()2"($:/#/)1#,5"19(5("J1",$%4(D

    fCgN/#%

  • 8/13/2019 Java Concurency in Practice

    154/234

    SX 0$9$>1%43""(%4?@%-"$4)#4(

    @"1%#4$..?W,$%?1J)2()"#4O/)2$)#,5"19(5("J1",$%4(#%/#%$%?13/3551")?13"$%/6("6#)2,($/3"(,(%)/k

    ;16 1J)(% $"( )2(/( 41%:#)#1%/ .#O(.? )1 $"#/( #% ?13" /#)3$)#1%k >$% ?13 /3551") ?13" $%/6(" 6#)2,($/3"(,(%)/k

    @/)2#/41:(.#O(.?)17(3/(:#%1)2("/#)3$)#1%/62("()2(41%:#)#1%/,$?7(:#JJ("(%)k E2$) 2#::(% 41/)/W /342 $/ #%4"($/(: :(9(.15,(%) 1" ,$#%)(%$%4( "#/OW $"( ?13 )"$:#%

  • 8/13/2019 Java Concurency in Practice

    155/234

    CS\Q!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    ,1/) :#JJ#43.) )1 )"$4O :16% $%: (.#,#%$)(W 216(9("W $%?)2#%

  • 8/13/2019 Java Concurency in Practice

    156/234

    U] 0$9$>1%43""(%4?@%-"$4)#4(

    S/4()*@@A@AK"1/5(59./?/O"./%&9&0*)F50":?b32"86%)H")/%(3C*)/"?/O"./%&-*)'*&."4*3A

    >2$5)("Q(B5.1"(:#:(%)#J?#%

  • 8/13/2019 Java Concurency in Practice

    157/234

    CUCQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    2/3./&4@@A@AC*)/"?/O*0F''*33.%"J"3?*TC*)/"?/O"./%&7/00*&/&S)"5*8%)")/&4a(*(*,5>?*5*&."./%&3A

    fY#(6J3../#*(#,$

  • 8/13/2019 Java Concurency in Practice

    158/234

    UG 0$9$>1%43""(%4?@%-"$4)#4(

    3/(/$)1,#4 "(J("(%4(/ )135:$)( #%:#9#:3$. .#%O51#%)("/D @%1%(W )2((%)#"( #%/(")#1%1" "(,19$. #/ /("#$.#*(:d #% )2(

    1)2("W1%.?35:$)(/)1#%:#9#:3$.51#%)("/$"(/("#$.#*(:D

    @@ADADAF>>?+/&4F50":?b32"8a("?/."./#*?+

    R,:$2.`/ .$6 K3$%)#J#(/ )2( 51//#7.( /5((:35 62(% ,1"( 41,53)#%

  • 8/13/2019 Java Concurency in Practice

    159/234

  • 8/13/2019 Java Concurency in Practice

    160/234

  • 8/13/2019 Java Concurency in Practice

    161/234

    CULQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    2/3./&4@@AMA7%?0/&4"2%'

  • 8/13/2019 Java Concurency in Practice

    162/234

    UQ 0$9$>1%43""(%4?@%-"$4)#4(

    /(5$"$)( .14O/ )1

  • 8/13/2019 Java Concurency in Practice

    163/234

    CUVQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    :"$,$)#4$..? #,5"19(5"1/5(4)/ J1"41%43""(%4?1%$/?/)(,6#)2,$%?5"14(//1"/D+2( .14O/5.#))#%

  • 8/13/2019 Java Concurency in Practice

    164/234

    UX 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@@A\A7"3:Y"3*0K">93/&42%'/&4Ab=89&$;'$%&G)M04* *0$## '.94G&;F$G W

    XX '7"*892"4:$.42" G204*7h M)*C&.#f"g 6)$9;&; M7 02*C#f"x,k5JDl'gG94/$.& #.$.4* %4"$0 4". ,k5JDl' ] ^z[G94/$.& %4"$0 ,2;&fg M)*C&.#[G94/$.& %4"$0 JM`&*.fg 02*C#[

    G94/$.& #.$.4* *0$## ,2;& W +++ \

    G)M04* '.94G&;F$GU4". ")3K)*C&.#V WM)*C&.# ] "&? ,2;&f")3K)*C&.#g[02*C# ] "&? JM`&*.f,k5JDl'g[%29 U4". 4 ] Z[ 4 R ,k5JDl'[ 4__V

    02*C#f4g ] "&? JM`&*.UV[\

    G94/$.& %4"$0 4". 8$#8UJM`&*. C&7V W9&.)9" F$.8+$M#UC&7+8$#8D2;&UV x M)*C&.#+0&"6.8V[

    \

    G)M04* JM`&*. 6&.UJM`&*. C&7V W4". 8$#8 ] 8$#8UC&7V[#7"*892"4:&; U02*C#f8$#8 x ,k5JDl'gV W

    %29 U,2;& 3 ] M)*C&.#f8$#8g[ 3 Y] ")00[ 3 ] 3+"&-.V4% U3+C&7+&()$0#UC&7VV

    9&.)9" 3+/$0)&[\9&.)9" ")00[

    \

    G)M04* /24; *0&$9UV W%29 U4". 4 ] Z[ 4 R M)*C&.#+0&"6.8[ 4__V W

    #7"*892"4:&; U02*C#f4 x ,k5JDl'gV WM)*C&.#f4g ] ")00[

    \\

    \+++

    \

    =14O

  • 8/13/2019 Java Concurency in Practice

    165/234

    CU\Q!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    (B4.3/#9(.?DM1""($:,1/).?:$)$/)"34)3"(/WN&$;P94.&52*C4$%1JJ("2$5)("GDc+2($)1,#49$"#$7.(4.$//(/5"19#:(9("?J#%(-N3)#.#*$)#1%#/2#

  • 8/13/2019 Java Concurency in Practice

    166/234

  • 8/13/2019 Java Concurency in Practice

    167/234

    CLCQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CCD-("J1",$%4($%:F4$.$7#.#)?

    +2( %3,7("/ J1" )2( /?%42"1%#*(: 41..(4)#1%/ $"( %1) $/ (%413"$

  • 8/13/2019 Java Concurency in Practice

    168/234

    LG 0$9$>1%43""(%4?@%-"$4)#4(

    :(.#9("(: )1 )2( J#"(cW5.3/

  • 8/13/2019 Java Concurency in Practice

    169/234

    CLSQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1.*)@DAJ*3./&4$%&'())*&.-)%4)"53>1%43""(%) 5"1-N/c$"(,$:($9$#.$7.(D

    @DA@AJ*3./&46%)$%))*'.&*33

    8(9(.15#%

  • 8/13/2019 Java Concurency in Practice

    170/234

    LU 0$9$>1%43""(%4?@%-"$4)#4(

    fGg @%$413%)#%

  • 8/13/2019 Java Concurency in Practice

    171/234

    CLLQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    172/234

    LQ 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@DALAJ*3./&4;?%'

  • 8/13/2019 Java Concurency in Practice

    173/234

    CLVQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1-N/:1(/ %1)%(4(//$"#.?,$O( )(/)/,1"((JJ(4)#9(D+1 ,$B#,#*( )2(42$%4( 1J:()(4)#%-N/W

    /1

    )2$)

    $)

    $%?

  • 8/13/2019 Java Concurency in Practice

    174/234

    LX 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@DAVA-)%0('*)'%&3(5*)J*3.-)%4)"56%)K2)";&;K)%%&9AG)M04* *0$## @).=$C&=. W

    G94/$.& #.$.4* %4"$0 L-&*).29'&9/4*& G220] L-&*).29#+"&?D$*8&;=89&$;@220UV[

    G94/$.& %4"$0 1.234*I".&6&9 G).')3 ] "&? 1.234*I".&6&9UZV[G94/$.& %4"$0 1.234*I".&6&9 .$C&')3 ] "&? 1.234*I".&6&9UZV[G94/$.& %4"$0 D7*04*K$994&9 M$994&9[G94/$.& %4"$0 K2)";&;K)%%&9RI".&6&9T MM[G94/$.& %4"$0 4". "=94$0#e "@$49#[

    G)M04* #.$.4* /24; 3$4"U'.94"6fg $96#V W"&? @).=$C&=.U^Ze ^Ze ^ZZZZZV+..UV[ XX #$3G0& G$9$3&.&9#G220+#8).;2?"UV[

    \

    @).=$C&=.U4". *$G$*4.7e 4". "G$49#e 4". ".94$0#V W.84#+MM ] "&? K2)";&;K)%%&9RI".&6&9TU*$G$*4.7V[.84#+"=94$0# ] ".94$0#[.84#+"@$49# ] "G$49#[.84#+M$994&9 ] "&? D7*04*K$994&9U"G$49#c j _ ^V[

    \

    /24; ..UV W.97 W

    %29 U4". 4 ] Z[ 4 R "@$49#[ 4__V WG220+&-&*).&U"&? @92;)*&9UVV[G220+&-&*).&U"&? D2"#)3&9UVV[

    \M$994&9+$?$4.UV[ XX ?$4. %29 $00 .89&$;# .2 M& 9&$;7M$994&9+$?$4.UV[ XX ?$4. %29 $00 .89&$;# .2 %4"4#8$##&9.L()$0#UG).')3+6&.UVe .$C&')3+6&.UVV[

    \ *$.*8 UL-*&G.42" &V W.892? "&? N)".43&L-*&G.42"U&V[

    \\

    *0$## @92;)*&9 43G0&3&".# N)""$M0& W Xc 54#.4"6 ^j+z cX \

    *0$## D2"#)3&9 43G0&3&".# N)""$M0& W Xc 54#.4"6 ^j+z cX \\

    2/3./&4@DAWA-)%0('*)"&0$%&3(5*)$?"33*393*0/&@).=$C&=.A

    Xc 4""&9 *0$## 2% @).=$C&=. U54#.4"6 ^j+pV cX*0$## @92;)*&9 43G0&3&".# N)""$M0& WG)M04* /24; 9)"UV W

    .97 W4". #&&; ] U.84#+8$#8D2;&UV { U4".V'7#.&3+"$"2=43&UVV[4". #)3 ] Z[M$994&9+$?$4.UV[%29 U4". 4 ] "=94$0#[ 4 T Z[ aa4V W

    MM+G).U#&&;V[#)3 _] #&&;[#&&; ] -29'84%.U#&&;V[

    \G).')3+6&.1";1;;U#)3V[M$994&9+$?$4.UV[

    \ *$.*8 UL-*&G.42" &V W.892? "&? N)".43&L-*&G.42"U&V[

    \\

    \

    *0$## D2"#)3&9 43G0&3&".# N)""$M0& WG)M04* /24; 9)"UV W

    .97 WM$994&9+$?$4.UV[4". #)3 ] Z[%29 U4". 4 ] "=94$0#[ 4 T Z[ aa4V W

    #)3 _] MM+.$C&UV[\.$C&')3+6&.1";1;;U#)3V[M$994&9+$?$4.UV[

    \ *$.*8 UL-*&G.42" &V W.892? "&? N)".43&L-*&G.42"U&V[

    \

    \\

  • 8/13/2019 Java Concurency in Practice

    175/234

    CL\Q!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    176/234

    Q] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@DA\AJ:)*"0S"'.%)+6%)J*3./&4=89&$;@220L-&*).29A*0$## =.4"6=89&$;

  • 8/13/2019 Java Concurency in Practice

    177/234

    CQCQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    178/234

    QG 0$9$>1%43""(%4?@%-"$4)#4(

    S/4()*@DA@A=43&;@).=$C&=.8/.:H")/%(3;(66*)$">"'/./*3A

    @),$?7(/1,(62$)53**.#%

  • 8/13/2019 Java Concurency in Practice

    179/234

    CQSQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1?*F?4%)/.:53

    E2#.(K2)";&;K)%%&9 #/$ J$#".?/1.#: #,5.(,(%)$)#1% )2$)5("J1",/ "($/1%$7.?6(..W #) )3"%/13) )17(%1,$)42 J1"

    (#)2(" 199$7K02*C4"6O)&)& 1" 54"C&;K02*C4"6O)&)& b62#42 (B5.$#%/ 62? )2#/ 73JJ(" $.")/&4;?%'?*5*&."./%&3A

    @DADALAK*"3()/&4N*3>%&3/#*&*33

    F1 J$" 6( 2$9( J143/(: 1% ,($/3"#%

  • 8/13/2019 Java Concurency in Practice

    180/234

    QU 0$9$>1%43""(%4?@%-"$4)#4(

    ;#/)1

  • 8/13/2019 Java Concurency in Practice

    181/234

    CQLQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    182/234

    QQ 0$9$>1%43""(%4?@%-"$4)#4(

    ?13$4)3$..?/)$"))#,#%

  • 8/13/2019 Java Concurency in Practice

    183/234

    CQVQ!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    184/234

    QX 0$9$>1%43""(%4?@%-"$4)#4(

    ,#/)$O(/d )$O#%$..#%

  • 8/13/2019 Java Concurency in Practice

    185/234

    CQ\Q!-$")@@@e=#9(%(//W-("J1",$%4(W$%:+(/)#%2$5)("CGD+(/)#%1%43""(%)-"1

  • 8/13/2019 Java Concurency in Practice

    186/234

    V] 0$9$>1%43""(%4?@%-"$4)#4(

    -").,HTF0#"&'*0J%>/'3

    =>.?@(,36D PB5.#4#)=14O/

    =>.?@(,

    38D

    !3#.:#%3/)1,

    F?%42"1%#*("/

    =>.?@(,3BD R)1,#4Y$"#$7.(/$%:I1%7.14O#%1%43""(%4?

    1#D)#%E,.?>*

  • 8/13/2019 Java Concurency in Practice

    187/234

    CVCV!-$")@YeR:9$%4(:+15#4/ GL!>2$5)("CSPB5.#4#)=14O/

    $:">.*)@L =1>?/'/.2%'1%)"$"?)162$)/1,(2$9(6"#))(%WN&&".9$".52*C#/%1)$"(5.$4(,(%)J1"

    #%)"#%/#4.14O#%

  • 8/13/2019 Java Concurency in Practice

    188/234

    VG 0$9$>1%43""(%4?@%-"$4)#4(

    @LA@A@A-%??*0"&0J/5*02%'

  • 8/13/2019 Java Concurency in Practice

    189/234

    CVSV!-$")@YeR:9$%4(:+15#4/ GL!>2$5)("CSPB5.#4#)=14O/

    2/3./&4@LALAF#%/0/&42%'

  • 8/13/2019 Java Concurency in Practice

    190/234

    VU 0$9$>1%43""(%4?@%-"$4)#4(

    @%>2$5)("CCW6(/$6216"(:34#%-NW5"14(//1"413%)W4$42(/#*(W$%:0YZ42$"$4)("#/)#4/W$..1J

    62#424$%42$%

  • 8/13/2019 Java Concurency in Practice

    191/234

    CVLV!-$")@YeR:9$%4(:+15#4/ GL!>2$5)("CSPB5.#4#)=14O/

    @LALAS"/)&*33

    +2(N&&".9$".52*C41%/)"34)1"1JJ("/$421#4(1J)61J$#"%(//15)#1%/e4"($)($%1%J$#".14Ob)2(:(J$3.)c1"$J$#".14OD

    +2"($:/ $4K3#"( $ J$#" .14O #% )2( 1":(" #% 62#42 )2(? "(K3(/)(: #)W 62("($/ $ %1%J$#" .14O 5(",#)/ 7$"

  • 8/13/2019 Java Concurency in Practice

    192/234

    VQ 0$9$>1%43""(%4?@%-"$4)#4(

    @LAMA$:%%3/&4;*.8**&C+&':)%&/O*0"&0N**&.)"&.2%'

  • 8/13/2019 Java Concurency in Practice

    193/234

    CVVV!-$")@YeR:9$%4(:+15#4/ GL!>2$5)("CSPB5.#4#)=14O/

    +2(.14O#%

  • 8/13/2019 Java Concurency in Practice

    194/234

    VX 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@LAZAB)">>/&4"F$G8/.:"N*"08)/.*2%'

  • 8/13/2019 Java Concurency in Practice

    195/234

  • 8/13/2019 Java Concurency in Practice

    196/234

    X] 0$9$>1%43""(%4?@%-"$4)#4(

    E2#.()2#/$55"1$42#/($/?(%13

  • 8/13/2019 Java Concurency in Practice

    197/234

  • 8/13/2019 Java Concurency in Practice

    198/234

    XG 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@MAVA;%(&0*0;(66*)93/&4$)(0*;?%'

  • 8/13/2019 Java Concurency in Practice

    199/234

    CXSV!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    :1%`) .()?13:1$%?)2#%

  • 8/13/2019 Java Concurency in Practice

    200/234

    XU 0$9$>1%43""(%4?@%-"$4)#4(

    73JJ(" #/ #%:((:%1%(,5)?W #) "(,19(/ )2( J#"/) (.(,(%)W62#42 #)4$%:17(4$3/( #) /)#..21.:/ )2( .14O

  • 8/13/2019 Java Concurency in Practice

    201/234

    CXLV!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    E2(%3/#%

  • 8/13/2019 Java Concurency in Practice

    202/234

    XQ 0$9$>1%43""(%4?@%-"$4)#4(

    K2)";&;K)%%&9,(()/)2(1%(#%W1%(13)"(K3#"(,(%)W73):1(/%1),(())2(3%#J1",6$#)("/"(K3#"(,(%)7(4$3/(

    6$#)#%?*TFR".*$?"33

    +2(/)$")#%

  • 8/13/2019 Java Concurency in Practice

    203/234

    CXVV!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    @MADAWAC(Y'?"33C"6*.+,33(*3

    N/#%

  • 8/13/2019 Java Concurency in Practice

    204/234

    XX 0$9$>1%43""(%4?@%-"$4)#4(

    )1/((#J)2(?,#

  • 8/13/2019 Java Concurency in Practice

    205/234

    CX\V!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    >211/( 7()6((% 3/#%

  • 8/13/2019 Java Concurency in Practice

    206/234

    \] 0$9$>1%43""(%4?@%-"$4)#4(

    2/3./&4@MA@DA$%(&./&4C*5">:%)*,5>?*5*&.*093/&452*CAXX ,2. 9&$007 82? `$/$+).40+*2"*)99&".+'&3$G829& 4# 43G0&3&".&;b=89&$;'$%&G)M04* *0$## '&3$G829&J"52*C W

    G94/$.& %4"$0 52*C 02*C ] "&? N&&".9$".52*CUV[XX DJ,AI=IJ, @NLAID1=Lh G&934.#1/$40$M0& UG&934.# T ZVG94/$.& %4"$0 D2";4.42" G&934.#1/$40$M0& ] 02*C+"&?D2";4.42"UV[bH)$9;&;K7Ud02*CdV G94/$.& 4". G&934.#[

    '&3$G829&J"52*CU4". 4"4.4$0@&934.#V W

    02*C+02*CUV[.97 WG&934.# ] 4"4.4$0@&934.#[

    \ %4"$007 W02*C+)"02*CUV[

    \\

    XX K5JDl'a!,=I5h G&934.#1/$40$M0&G)M04* /24; $*()49&UV .892?# I".&99)G.&;L-*&G.42" W

    02*C+02*CUV[.97 W

    ?840& UG&934.# R] ZVG&934.#1/$40$M0&+$?$4.UV[

    aaG&934.#[\ %4"$007 W

    02*C+)"02*CUV[\

    \

    G)M04* /24; 9&0&$#&UV W02*C+02*CUV[.97 W

    __G&934.#[G&934.#1/$40$M0&+#46"$0UV[

    \ %4"$007 W02*C+)"02*CUV[

    \\

    \

    R_F2$%:.(/,$%?1J)2(:()$#./1J #,5.(,(%)#%

  • 8/13/2019 Java Concurency in Practice

    207/234

    C\CV!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    R4K3#/#)#1%$%:"(.($/(#%R_F)$O()2(J1",//216%#%=#/)#%?*2".':

    J"&'82.5$.*8

    #%

    =#/)#%1%43""(%4?@%-"$4)#4(

    2/3./&4@MA@MA;/&")+2".':93/&41M#.9$*.O)&)&;'7"*892"4:&9Ab=89&$;'$%&G)M04* *0$## J"&'82.5$.*8 W

    G94/$.& %4"$0 '7"* #7"* ] "&? '7"*UV[

    G)M04* /24; #46"$0UV W #7"*+9&0&$#&'8$9&;UZV[ \

    G)M04* /24; $?$4.UV .892?# I".&99)G.&;L-*&G.42" W#7"*+$*()49&'8$9&;I".&99)G.4M07UZV[

    \

    G94/$.& *0$## '7"* &-.&";# 1M#.9$*.O)&)&;'7"*892"4:&9 WG92.&*.&; 4". .971*()49&'8$9&;U4". 46"29&;V W

    XX ')**&&; 4% 0$.*8 4# 2G&" U#.$.& ]] ^Ve &0#& %$409&.)9" U6&.'.$.&UV ]] ^V S ^ h a^[

    \

    G92.&*.&; M220&$" .97N&0&$#&'8$9&;U4". 46"29&;V W#&.'.$.&U^V[ XX 5$.*8 4# "2? 2G&"9&.)9" .9)&[ XX J.8&9 .89&$;# 3$7 "2? M& $M0& .2 $*()49&

    \\

    \

    @% J"&'82.5$.*8W )2( R_F /)$)( 21.:/ )2( .$)42 /)$)( 4.1/(: b*("1c 1" 15(% b1%(cD +2( $?$4. ,()21: 4$../

    $*()49&'8$9&;I".&99)G.4M07#%

    R_FW

    62#42

    #%

    )3"%

    41%/3.)/

    )2(

    =N71*()49&'8$9&;

    ,()21:

    #%

    J"&'82.5$.*8D

    +2(

    .971*()49&a'8$9&;#,5.(,(%)$)#1%,3/)"()3"%$9$.3(#%:#4$)#%

  • 8/13/2019 Java Concurency in Practice

    209/234

    C\SV!-$")@YeR:9$%4(:+15#4/GQ!>2$5)("CU!3#.:#%3/)1,F?%42"1%#*("/

    fCUg!(4$3/()2(5"1)(4)(:/)$)(,$%#53.$)#1%,()21:/2$9()2(,(,1"?/(,$%)#4/1J$91.$)#.("($:1"6"#)($%:N&&".9$".52*C#/4$"(J3.)1"($:)2(2?"&9J#(.:1%.?$J)("4$..#%

  • 8/13/2019 Java Concurency in Practice

    210/234

    \U 0$9$>1%43""(%4?@%-"$4)#4(

    @MAWALAS(.()*J"3

  • 8/13/2019 Java Concurency in Practice

    211/234

    C\LV!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%.*)@VAF.%5/'H")/"Y?*3"&0P%&Y?%'

  • 8/13/2019 Java Concurency in Practice

    212/234

    \Q 0$9$>1%43""(%4?@%-"$4)#4(

    ,$O(5"1

    +2($55"1$42)$O(%7?,1/)5"14(//1"$"42#)(4)3"(/W #%4.3:#%RFc #%/)"34)#1%D bH)2(" 5"14(//1"/W /342 $/ -16("->W #,5.(,(%) )2( /$,( J3%4)#1%$.#)? 6#)2 $ 5$#" 1J #%/)"34)#1%/e

    .1$:.#%O(:$%:/)1"(41%:#)#1%$.Dc>RF2$/)2"((15("$%:/ $,(,1"?.14$)#1%Y1%62#42)115("$)(W)2((B5(4)(:1.:

    9$.3( RW $%: )2( %(6 9$.3( !D>RF $)1,#4$..? 35:$)(/Y )1 )2(%(6 9$.3( !W 73)1%.? #J )2( 9$.3( #% Y ,$)42(/ )2(

    (B5(4)(:1.:9$.3(Rd1)2("6#/( #):1(/%1)2#%RF#/%1)7.14O(:W#)4$%:(4#:(62()2("#)6$%)/)1)"?$

  • 8/13/2019 Java Concurency in Practice

    213/234

    C\VV!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%*)"./%&Ab=89&$;'$%&G)M04* *0$## '43)0$.&;D1' W

    bH)$9;&;K7Ud.84#dV G94/$.& 4". /$0)&[

    G)M04* #7"*892"4:&; 4". 6&.UV W 9&.)9" /$0)&[ \

    G)M04* #7"*892"4:&; 4". *23G$9&1";'?$GU4". &-G&*.&;B$0)&e4". "&?B$0)&V W

    4". 20;B$0)& ] /$0)&[

    4% U20;B$0)& ]] &-G&*.&;B$0)&V/$0)& ] "&?B$0)&[9&.)9" 20;B$0)&[

    \

    G)M04* #7"*892"4:&; M220&$" *23G$9&1";'&.U4". &-G&*.&;B$0)&e4". "&?B$0)&V W

    9&.)9" U&-G&*.&;B$0)&]] *23G$9&1";'?$GU&-G&*.&;B$0)&e "&?B$0)&VV[

    \\

    +2()?5#4$.5$))("%J1"3/#%RF#/J#"/))1"($:)2(9$.3(RJ"1,YW:("#9()2(%(69$.3(!J"1,RW$%:)2(%3/(>RF)1

    $)1,#4$..? 42$%RF

    $::"(//(/ )2( 5"17.(, 1J #,5.(,(%)#%

  • 8/13/2019 Java Concurency in Practice

    214/234

    \X 0$9$>1%43""(%4?@%-"$4)#4(

    :1(/%`)/$9($%?$4)3$.(B(43)#1%41/)DH%)2(1)2("2$%:W(B(43)#%RFJ"1,6#)2#%)2(5"1RF

    )?5#4$..?

    )$O(/

    1%

    )2(

    1":("

    1J

    $2$%:J3. 1J 4.14O 4?4.(/W /#%4( %1 /?%42"1%#*$)#1% $4"1// 5"14(//1"/ #/ %(4(//$"?D R/ 1J )2#/ 6"#)#%RF1%,3.)#5.(>-N/?/)(,/"$%

  • 8/13/2019 Java Concurency in Practice

    215/234

    C\\V!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%

  • 8/13/2019 Java Concurency in Practice

    216/234

    ]] 0$9$>1%43""(%4?@%-"$4)#4(

    S/4()*@VA@A52*C"&01.234*I".&6&9-*)6%)5"&'*9&0*)7/4:$%&.*&./%&A

    S/4()*@VADA

    52*C

    "&0

    1.234*I".&6&9

    -*)6%)5"&'*

    9&0*)

    K%0*)".*

    $%&.*&./%&A

    2/3./&4@VAMAN"&0%5P(5Y*)R*&*)".%)93/&4N&&".9$".52*CAb=89&$;'$%&G)M04* *0$## N&&".9$".52*C@#&);2N$";23 &-.&";# @#&);2N$";23 W

    G94/$.& %4"$0 52*C 02*C ] "&? N&&".9$".52*CU%$0#&V[G94/$.& 4". #&&;[

    N&&".9$".52*C@#&);2N$";23U4". #&&;V W.84#+#&&; ] #&&;[

    \

    G)M04* 4". "&-.I".U4". "V W02*C+02*CUV[.97 W

    4". # ] #&&;[#&&; ] *$0*)0$.&,&-.U#V[4". 9&3$4";&9 ] # x "[9&.)9" 9&3$4";&9 T Z S 9&3$4";&9 h 9&3$4";&9 _ "[

    \ %4"$007 W02*C+)"02*CUV[

    \\

    \

  • 8/13/2019 Java Concurency in Practice

    217/234

    G]CV!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%

  • 8/13/2019 Java Concurency in Practice

    218/234

    ]G 0$9$>1%43""(%4?@%-"$4)#4(

    41%/#/)(%4?D @% .#%O(: 41..(4)#1% 4.$//(/ /342 $/ K3(3(/W ?13 4$% /1,()#,(/ RF)1)"?)1 #%/)$.. #)1%)2()151J)2(/)$4OD @J)2(/$,(%1:( #//)#..1%)2()151J)2(/)$4O$/62(%6(

    /)$")(:W)2(>RF/344((:/d#J)2()15%1:(2$/42$%RFD

    D$#D2)".&9 $%: D2"*)99&".'.$*C #..3/)"$)( 42$"$4)("#/)#4/ 1J $.. %1%7.14O#%

  • 8/13/2019 Java Concurency in Practice

    219/234

    G]SV!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%

  • 8/13/2019 Java Concurency in Practice

    220/234

    ]U 0$9$>1%43""(%4?@%-"$4)#4(

    !()6((%)2(/()6115("$)#1%/W)2(K3(3(#/#%)2( #%)(",(:#$)(/)$)(W/216%#%M#

  • 8/13/2019 Java Concurency in Practice

    221/234

    G]LV!-$")@YeR:9$%4(:+15#4/GV!>2$5)("CLDR)1,#4Y$"#$7.(/$%:I1%7.14O#%0".*)3/&D2"*)99&".54"C&;O)&)&AG94/$.& *0$## ,2;&RLT W

    G94/$.& %4"$0 L 4.&3[G94/$.& /20$.40& ,2;&RLT "&-.[

    G)M04* ,2;&UL 4.&3V W

    .84#+4.&3 ] 4.&3[\\

    G94/$.& #.$.4* 1.234*N&%&9&"*&

  • 8/13/2019 Java Concurency in Practice

    222/234

    ]Q 0$9$>1%43""(%4?@%-"$4)#4(

    (%13RFjc15("$)#1% )2$)4$%15("$)( 1% $51#%)("#%)(

  • 8/13/2019 Java Concurency in Practice

    223/234

    G]VV!-$")@YeR:9$%4(:+15#4/GX!>2$5)("CQD+2(0$9$Z(,1"?Z1:(.

    $:">.*)@WAJ:*!"#"K*5%)+K%0*?+2"13

  • 8/13/2019 Java Concurency in Practice

    224/234

    ]X 0$9$>1%43""(%4?@%-"$4)#4(

    ,1:(./$4"1//$"42#)(4)3"(/W0$9$5"19#:(/#)/16%,(,1"?,1:(.W$%:)2(0YZ:($./6#)2)2(:#JJ("(%4(/7()6((%)2(

    0ZZ$%:)2(3%:(".?#%

  • 8/13/2019 Java Concurency in Practice

    225/234

    G]\V!-$")@YeR:9$%4(:+15#4/GX!>2$5)("CQD+2(0$9$Z(,1"?Z1:(.

    2/3./&4@WA@A,&3(66/'/*&.?+C+&':)%&/O*0-)%4)"5.:".'"&:"#*C()>)/3/&4N*3(?.3A!"#$%!"%&'()

    G)M04* *0$## @2##4M0&N&29;&94"6 W#.$.4* 4". - ] Ze 7 ] Z[#.$.4* 4". $ ] Ze M ] Z[

    G)M04* #.$.4* /24; 3$4"U'.94"6fg $96#V

    .892?# I".&99)G.&;L-*&G.42" W=89&$; 2"& ] "&? =89&$;U"&? N)""$M0&UV W

    G)M04* /24; 9)"UV W$ ] ^[- ] M[

    \\V[=89&$; 2.8&9 ] "&? =89&$;U"&? N)""$M0&UV W

    G)M04* /24; 9)"UV WM ] ^[7 ] $[

    \\V[2"&+#.$9.UV[ 2.8&9+#.$9.UV[2"&+`24"UV[ 2.8&9+`24"UV['7#.&3+2).+G94".0"UdU d_ - _ ded _ 7 _ dVdV[

    \\

    R:$)$"$4(1443"/62(%$9$"#$7.(#/"($:7?,1"()2$%1%()2"($:W$%:6"#))(%7?$).($/)1%()2"($:W73))2("($:/

    $%:6"#)(/$"(%1)1":("(:7?2$55(%/7(J1"(DR41""(4).?/?%42"1%#*(:5"1W)2(%R2$55(%/7(J1"(>DfSg=14O/$%:3%.14O/1%(B5.#4#)52*C17[(4)/2$9()2(/$,(,(,1"?/(,$%)#4/$/#%)"#%/#4.14O/DfUgT($:/$%:6"#)(/1J$)1,#49$"#$7.(/2$9()2(/$,(,(,1"?/(,$%)#4/$/91.$)#.(9$"#$7.(/D

    P9(% )213

  • 8/13/2019 Java Concurency in Practice

    226/234

    C] 0$9$>1%43""(%4?@%-"$4)#4(

    S/4()*@WADA,??(3.)"./%&%67">>*&3Y*6%)*/&.:*!"#"K*5%)+K%0*?A

    @WA@AMA-/44+Y"'

  • 8/13/2019 Java Concurency in Practice

    227/234

    GCCV!-$")@YeR:9$%4(:+15#4/GX!>2$5)("CQD+2(0$9$Z(,1"?Z1:(.

    2/3./&4@WADA,&&*)$?"33%6

  • 8/13/2019 Java Concurency in Practice

    228/234

    CG 0$9$>1%43""(%4?@%-"$4)#4(

    7(J1"($%1)2(")2"($:.1$:/)2$)/2$"(:"(J("(%4(W)2(%)2(6"#)(1J)2("(J("(%4()1)2(%(617[(4)4$%7("(1":("(:

    bJ"1, )2( 5("/5(4)#9(1J )2( )2"($: 41%/3,#%

  • 8/13/2019 Java Concurency in Practice

    229/234

    GCSV!-$")@YeR:9$%4(:+15#4/GX!>2$5)("CQD+2(0$9$Z(,1"?Z1:(.

    $))2(.(9(.1J#%:#9#:3$.,(,1"?$44(//(/ #)#/$/1")1J^41%43""(%4?$//(,7.?.$%

  • 8/13/2019 Java Concurency in Practice

    230/234

    CU 0$9$>1%43""(%4?@%-"$4)#4(

    ,()21: "(K3#"(/ /?%42"1%#*$)#1%D !3) $) )2( )#,(W /?%42"1%#*$)#1% 6$/ /.16 $%:W ,1"( #,51")$%).?W %1) 41,5.()(.?

    3%:("/)11:e)2((B4.3/#1%$/5(4)/6("(6(..(%13=53"51")(:)11JJ(")2(7(/)1J71)261".:/ .$*? #%#)#$.#*$)#1%6#)213)5$?#%

  • 8/13/2019 Java Concurency in Practice

    231/234

  • 8/13/2019 Java Concurency in Practice

    232/234

  • 8/13/2019 Java Concurency in Practice

    233/234

    GCVV!-$")@YeR:9$%4(:+15#4/ S]!!#7.#1:+a(%R"%1.:W0$,(/&1/.#%?"8?011)78I078=08'N=).'DR::#/1%E(/.(?WG]]CD

    01/23$!.142$%:I($.&$J)("DY040>=GG3'?&DR::#/1%E(/.(?WG]]LD

    ;$%/!1(2,DT'&$?=6$"?&XV)703)G'?&X07.AB76(?"7)G0$)"7: F7>Z>I [P@\>?"6''.)78&"C $('@P$(5-I5^AFN5-L

    AB12"&)=1"7>?)76)23'&"C>?"8?011)78I078=08'&W5$Z-"(//WG]]SD

    NT=2))5ell:1#D$4,D1"0$$'?7&D

    R::#/1%

    E(/.(?W

    C\\LD

    Z$")#% &$":%("DL('C07$0&$)6 6"1R)70$)"7&"CY"(7-"7#0B[&7'# &"3)$0)?'801' [I)C'[D F4#(%)#J#4 R,("#4$%W H4)17("

    C\V]D

    0$,(/&1/.#%

  • 8/13/2019 Java Concurency in Practice

    234/234

    CX 0$9$>1%43""(%4?@%-"$4)#4(

    T$,%#9$/=$::$:D5&2'6$Y)756$)"7DZ$%%#%?"8?011)78I078=08'&W5$Z-"(//WG]]LD

    NT=2))5ell:1#D$4,D1"