????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???????????????????????????????