Java中的synchronized關鍵字是用于實現線程同步的關鍵字。線程同步是指多個線程在訪問共享資源時,需要進行協調,以保證數據的正確性和完整性。在Java中,synchronized的使用可以讓我們編寫高效且線程安全的代碼。
// synchronized方法實現線程同步 public synchronized void add(int num) { count += num; } // synchronized代碼塊實現線程同步 public void subtract(int num) { synchronized (this) { count -= num; } }
在Java中,synchronized可以用來修飾方法和代碼塊。當修飾方法時,該方法只能在一個時間點被一個線程訪問,其他線程需要等待。當修飾代碼塊時,代碼塊內部只能有一個線程執行。synchronized可以認為是一種互斥鎖的機制,通過它可以實現對共享資源的訪問控制。
需要注意的是,synchronized只能控制多個線程之間的同步,但不能保證程序的正確性。在使用synchronized時,我們還需要注意避免死鎖、競爭條件等問題的出現。
// synchronized在多線程中使用 public class MyThread implements Runnable { private int count = 0; public synchronized void increaseCount() { count++; } @Override public void run() { for (int i = 0; i< 10000; i++) { increaseCount(); } } public static void main(String[] args) { MyThread myThread = new MyThread(); Thread t1 = new Thread(myThread); Thread t2 = new Thread(myThread); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(myThread.count); } }
以上代碼為多線程下的synchronized使用實例,通過兩個線程對共享資源count進行增加操作,最終得到了正確的結果。通過synchronized的同步機制,保證了線程之間對共享資源的正確訪問,實現了線程安全。