Java是一種常用的編程語言,支持多線程操作。多線程是指在程序中同時運行多個線程以實現并發執行的機制,從而提高程序運行效率。
多線程的運行需要保證線程間的安全性,因為同時運行多個線程,可能會產生競爭條件。為了解決這個問題,Java提供了鎖機制,用于控制多個線程對共享資源的訪問。
Java中的鎖分為兩種,分別為Synchronized關鍵字鎖和ReentrantLock類鎖。 Synchronized是Java提供的一種內置鎖,是一種輕量級鎖,用于實現互斥同步。ReentrantLock是一種重量級鎖,可以靈活地控制鎖的獲取和釋放,還支持公平性和可重入性,是Synchronized的替代品。
public class MyThread implements Runnable { private static int num = 0; private static ReentrantLock lock = new ReentrantLock(); public void run() { lock.lock(); try { System.out.println(++num); } finally { lock.unlock(); } } } public class Test { public static void main(String[] args) { MyThread myThread = new MyThread(); for (int i = 0; i< 10; i++) { new Thread(myThread).start(); } } }
上述代碼中,使用ReentrantLock類鎖來保證對共享資源num的操作是互斥的。在run方法中,首先調用lock方法獲取鎖,然后對num進行加操作,最后調用unlock方法釋放鎖。多個線程之間的加操作是互斥的,保證了程序的正確性。