From 2329cea6f7d960837bf213af6d68bde40b733a61 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sun, 8 Apr 2018 21:39:11 +0800 Subject: [PATCH] auto commit --- notes/Java 并发.md | 10 +++++----- pics/952afa9a-458b-44ce-bba9-463e60162945.png | Bin 0 -> 15360 bytes pics/ef8eab00-1d5e-4d99-a7c2-d6d68ea7fe92.png | Bin 0 -> 12288 bytes 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 pics/952afa9a-458b-44ce-bba9-463e60162945.png create mode 100644 pics/ef8eab00-1d5e-4d99-a7c2-d6d68ea7fe92.png diff --git a/notes/Java 并发.md b/notes/Java 并发.md index 89249b84..96d344a7 100644 --- a/notes/Java 并发.md +++ b/notes/Java 并发.md @@ -854,17 +854,17 @@ Java 内存模型定义了 8 个操作来完成主内存和工作内存的交互 Java 内存模型允许虚拟机将没有被 volatile 修饰的 64 位数据(long,double)的读写操作划分为两次 32 位的操作来进行,也就是说对这部分数据的操作可以不具备原子性。 -有一个错误认识就是,int 等原子性的变量在多线程操作中不会出现线程安全问题。之前的线程不安全示例代码中,cnt 变量属于 int 类型变量,1000 个线程对它进行自增操作之后,得到的值为 997 而不是 1000。 +有一个错误认识就是,int 等原子性的变量在多线程环境中不会出现线程安全问题。前面的线程不安全示例代码中,cnt 变量属于 int 类型变量,1000 个线程对它进行自增操作之后,得到的值为 997 而不是 1000。 为了方便讨论,将内存间的交互操作简化为 3 个:load、assign、store。 -下图演示了两个线程同时对 cnt 变量进行操作,load、assign、store 这三个操作不具备原子性,那么在 T1 修改 cnt 并且还没有将修改后的值写入主内存,T2 依然可以读入该变量的值。可以看出,这两个线程之后过后,虽然执行了两次自增运算,但是主内存中 cnt 的值最后为 1 而不是 2。因此对 int 类型读写操作满足原子性只是说明 assign 这个操作具备原子性。 +下图演示了两个线程同时对 cnt 变量进行操作,load、assign、store 这一系列操作不具备原子性,那么在 T1 修改 cnt 并且还没有将修改后的值写入主内存,T2 依然可以读入该变量的值。可以看出,这两个线程虽然执行了两次自增运算,但是主内存中 cnt 的值最后为 1 而不是 2。因此对 int 类型读写操作满足原子性只是说明 load、assign、store 这些单个操作具备原子性。 -
`_A_V=x||7f*%z?b*%+}C~G
z*LCra{gxQ@nc6cU2vXm@Ylk%iDM=t`%7y9Ez{)MnpY_0hN`cmxZBWkZMFZf4il^B=
zGYEQ2RGT<56}+BtYL|T=1kHW{|5K{;f9MWD#;n~t%npUR@Yr-;9SfaTN95;Yj_vX%
zKR<6e|JBPSXWb6jov*m^>lOW33sg?D<~S{_n*QDX<<{xDj_SV{)EjQASpGwnD;9~W<)JL
zJ-utv)*w=efnC0X4;4s6%CJDR_kP0%czA)wng{j|3ZY58>X#6G8UZ{p<|4kI&L2z@CtOa*!-@
z#)yuLR9D!llI+8DEEKHr=V6soHLnM+UendW?jV?+i|dOQ7q#AQjMGp}YBAG41R>H8
zg3@79hRA|RUp|@^S|~_TT%KU6DtYc5O|y6y>yTR4Wgew}3S;!r;NaAbEVDhbMqug1
zs*b)yNb!DufB!~}_2M^J|J1=Qt0;Y0j8W^QvZ|`jakh=Gg8dAFY{#RbA0zTyy}WqK
zaky9N-O(EBm0VHL_YirvE@G=9P6lH2HuLlI+YUvhH=e=>%x-MdK?dEuz4
(j?romlu)066aqEEt*1b
zY73N-))>?*f|(a1i~O?af?L>8yc9USD4)^k7ARSyNpRPH1DC^Snom7@EJd+-*~xRT
zrpSyh?7`RR@@a9zCy_Pe=9U;0Cqk3eXK^_x^wtW0cAxBE{_5TRzD`9P=;OQ-=hWlR
zV9+-Gk_(nLWzv3f?o)9ot#66Dpyb*g8k017lqE6!9wT5c2RhI-9A#cX;{$gcXoFoz
z!vfXa0_>E?4$gV4K93Z(rKO}Zn3*dB7Lo@V`oFxs$v@Y!3yM*(tq|ChUOx9kMGV$F
z{5O-y!s9%-{V$xOp@@;gC!2W?Fx~>|jLw`~zL=wZy2^`*4Ifd&!*5G(Y^Z)^JM4Yg
z=Ye|4j=*m!h4eb|AM&}dhUFu-vS?RSFF;6srsTAN1YyO(%gKEAWu8vj3?Jrf4ei)R
zNQE9x)I8@>glw_BNN|%hBoV3ys=~P=Bvdd-cXjml$3H;z{W}$p{qpukC;7_2zB1<{
z3q&*G(LNsJS6+8V%)IMMVnbXgk)dR=vt-1=%BfIQ9eSOmf?Q#c3@gAI(daU_PGxY9#$3$}vL
zV^Rqqd2rxw!ft;$DE!4Z8{S(#aw19}iZQx;S+Cp3iPtC_E@iEyT@N*uJ@<>jVxz`S
zP}m4`QIh%du`%8oEFIdcp_Kz6N_+@gz8-e5D_hUS|C)|=6V&)__ifX`naXDrswK#(
zUh+a(;{3owO6rd9QD`gDv!Y3TU$|-$vUGavlPn{>uI+*p%Tqd67r3rGQ1V#*MAx%b
zZ5AIAYy6iA7AfI5B8=#C36^2SxDFfya}WE+yRXl(YDlkCjNu_rc}&mN(%g;lul4>v
z4*nAdrFH~;o!|TACmeM7frA_j3m|wk=f+A)OM!EV3t#aChMBaCObYts3zlM@n{{z;
z$o+_~O_$eQT3Q+z9Zg%lA2EUg1qk8fBn6Z?FZv+l3@M3UIP&Y?l=if4!dqyM#Y%8y
zqQ~abFWhy$%p*;@n@mw@y(BnAildxi`cdotX+9?
z{=UBaTb}C9-g7IU4Tih}{8Q9H^koTFj`@ZJ7tQr20E%B
08|KRXiNH*4SwV|Drmyux(6J|h1^t++=Q($G)i8A