java中鎖與同步需要注意的幾點
1.只能給方法或方法的一部分加鎖,不能給類和變數加鎖
2.不必同步類中所有的方法,類可以同時擁有同步和非同步方法
3.每一個物件只有一個鎖,需要清楚同步是加在了什麼上面--物件
4.對於一個物件中的同步方法被一個執行緒呼叫之後,其他的執行緒將無法再次呼叫這個物件的同步方法,必須要等到第一個執行緒呼叫同步方法完成之後,第二個執行緒才能呼叫這個物件的同步方法,同時其他的執行緒將進入阻塞狀態,不能再呼叫這個物件的同步方法(注意,這裡的執行緒都是通過同一個物件去呼叫同步方法)
5.如果一個物件中有同步方法和非同步方法,那麼非同步方法可以同時被多個執行緒呼叫,不必像同步方法一樣,必須等到呼叫同步方法完成之後,才能呼叫
6.執行緒睡眠時,執行緒持有的鎖不會被釋放。
7.同一個執行緒可以獲得多個鎖,這是因為,一個執行緒可以通過其方法呼叫多個物件的多個同步方法
8.同步對於併發不利,所以要謹慎使用同步或者儘量使用範圍小的同步方法,因為同步可以同步方法,也可以同步方法中的一小部分程式碼,所以如果要用同步方法,則儘量的使用範圍小的同步。
9.在程式中使用同步程式碼的時候,要明確呼叫的是哪個物件的鎖,也就是在synchronized(object)中的object必須明確
摘自熔岩多執行緒http://lavasoft.blog.51cto.com/62575/99155