Java??????? synchronized
???????? ???????[ 2016/12/28 10:41:43 ] ??????????????????? Java ???????
????JAVA??synchronized????????????????????η??????????????????????????????????????????顣????????????synchronized????????instance??????object reference?????????????static??????class literals(?????????泣??)?????
????????????????????????????????
????A??????synchronized??????????????????????????????????????????????δ?????????????D?D??????????????????????????????????
????B???????????????????lock????????????
????C????????????????????????????????????????????????????????????ν??????????
??????????????synchronized??????????????????????
????????P1??P2?????????????????????ж????????????????????????????????P1??P2??????????????
????1?? ??synchronized???????????η??????????????£?
????Public synchronized void method(){
????//….
????}
???????????????????????synchronized????????????????????????????????????????????????????????????P1????????????????????????????????????γ???????????Ч????????????????????Class???????????????P2????????????????????synchronized???????????
??????????????????????′???
????public void method()
????{
????synchronized (this) // (1)
????{
????//…..
????}
????}
????(1)????this??????????????????????????????????P1??????????????????synchronized??????object reference???D?D????????P1?????????????????????P1???????????????P2?????P1????????????????????????????????????°????????????????????????????
????2??????飬??????????£?
????public void method(SomeObject so) {
????synchronized(so)
????{
????//…..
????}
????}
?????????????so???????????????????????????????????δ?????????????????????????????????д????????????????????????????????????δ???????????????????????instance?????????????????????????
????class Foo implements Runnable
????{
????private byte[] lock = new byte[0]; // ????instance????
????Public void method()
????{
????synchronized(lock) { //… }
????}
????//…..
????}
????????????byte??????????????????κζ??????èD?D??????????????????????byte[]???????3??????????Object lock = new Object()?????7?в?????
????3????synchronized??????static ????????????????£?
????Class Foo
????{
????public synchronized static void method1() // ?????static ????
????{
????//….
????}
????public void method2()
????{
????synchronized(Foo.class) // class literal(?????????泣??)
????}
????}
?????????е?method2()???????class literal?????????????????????static??????????Ч????????????????????????????????????????????????Class???????????????Class?????????????????????
??????????Effective Java??????п??????? Foo.class?? P1.getClass()??????????????????????????P1.getClass()?????????Class??????P1???????Foo??????????
?????????????????????ж????????synchronized??static????A????????????synchronized ??instance????B?????????????????Obj???????з?????A??B?????????????????????????????????????????A??????????Obj????????Class????B??????Obj????????????
????С?????£?
?????????synchronized?????????????????????????????????????????
?????????Щ????????????????????????????????????
????1?? ????private ??instance????+???? get???????????????public/protected??instance?????????罫?????????public??????????????????????????????????????????????????????JavaBean?????????????
????2?? ????instance??????????????????ArrayList???????????????????????????????????????get??????????instance????????ú????????????????????????private???????????????Σ??? ???????????get?????????synchronized??????????????????private?????clone()?D?D???????????????????????????????
??????

???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11