在Java開發(fā)中,面試時經(jīng)常會遇到各種類型的面試題,特別是涉及到Java多線程的問題時更是如此。其中,對象鎖是Java多線程程序中一個非常重要的概念。下面就讓我們來了解一下Java面試題型和對象鎖吧。
public class Test implements Runnable { private int count = 0; public void run() { for (int i = 0; i < 5; i++) { increase(); System.out.println(Thread.currentThread().getName() + "執(zhí)行第" + (i + 1) + "次,count = " + count); } } private synchronized void increase() { count++; } public static void main(String[] args) { Test test = new Test(); Thread thread1 = new Thread(test, "線程1"); Thread thread2 = new Thread(test, "線程2"); thread1.start(); thread2.start(); } }
上述代碼中,count是我們要進(jìn)行線程同步的變量,我們定義了一個increase()方法來對count進(jìn)行自增。而我們在這個方法上使用了synchronized關(guān)鍵字,這就是Java中的對象鎖。
當(dāng)一個線程調(diào)用increase()方法時,它將獲取對象鎖,其他線程將無法訪問該對象的同步塊。而當(dāng)該線程執(zhí)行完畢后,它會釋放對象鎖,其他線程才能再次獲得對象鎖,進(jìn)入同步塊進(jìn)行操作。
在多線程的環(huán)境下使用對象鎖可以避免數(shù)據(jù)的爭用,確保數(shù)據(jù)的正確性,但同時也會帶來一定的性能損失。因此,在實際開發(fā)中,我們需要根據(jù)具體情況選擇合適的同步方案,提高程序的執(zhí)行效率。