Java中,對(duì)象鎖和類(lèi)鎖是同步代碼的兩種實(shí)現(xiàn)方式。在多線程編程中,它們可以保證數(shù)據(jù)的同步和線程安全。
對(duì)象鎖指的是某個(gè)對(duì)象在被鎖定后,其他線程訪問(wèn)該對(duì)象的同步方法或代碼塊會(huì)被阻塞,直到原先線程釋放該對(duì)象鎖。使用synchronized關(guān)鍵字可以實(shí)現(xiàn)對(duì)象鎖。
public class ObjectLock { private int count = 0; private Object lockObj = new Object(); public void addCount() { synchronized(lockObj) { count++; } } }
上述代碼中,lockObj就是對(duì)象鎖,它被用來(lái)保證對(duì)count屬性的訪問(wèn)是同步的。在addCount()方法內(nèi),使用synchronized保證了對(duì)lockObj的訪問(wèn)是互斥的。
類(lèi)鎖指的是某個(gè)類(lèi)在被鎖定后,其他線程無(wú)論實(shí)例化該類(lèi)還是訪問(wèn)其中的同步方法,都會(huì)被阻塞。使用synchronized關(guān)鍵字修飾靜態(tài)方法可以實(shí)現(xiàn)類(lèi)鎖。
public class ClassLock { private static int count = 0; public static synchronized void addCount() { count++; } }
上述代碼中,addCount()方法是靜態(tài)方法,使用synchronized關(guān)鍵字修飾,它就是類(lèi)鎖。無(wú)論其他線程訪問(wèn)該類(lèi)的同步方法還是實(shí)例化該類(lèi),都必須等待原先線程釋放類(lèi)鎖。