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