Java 中的原子性和同步鎖是非常重要的概念,下面我們來具體了解一下:
1. 原子性
原子性是指一個操作是不可中斷的,即使在多線程的情況下,一個操作具有原子性,也不會被其它線程打斷。例如,對于普通的變量 i,它的 ++ 操作不具有原子性,因為這個操作分為兩步:先將 i 取出,然后加上1。如果同時有兩個線程對 i 進行 ++ 操作,就會出現沖突。
2. 同步鎖
同步鎖是用來保證代碼塊在多線程環境中的同步執行的,即在同一時刻只能有一個線程進入代碼塊。synchronized 就是 Java 中實現同步鎖的關鍵字,它可以用來修飾一個代碼塊或一個方法。
下面我們來看一個例子:
public class MyThread { private static int num = 0; public static void main(String[] args) { Thread t1 = new Thread(() ->{ for (int i = 0; i< 10000; i++) { addNum(); } }); Thread t2 = new Thread(() ->{ for (int i = 0; i< 10000; i++) { addNum(); } }); t1.start(); t2.start(); try { t1.join(); t2.join(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(num); } private synchronized static void addNum() { num++; } }
這個例子中,我們創建了兩個線程 t1 和 t2,將一個靜態變量 num 作為共享變量傳遞給它們。然后我們在這兩個線程中都執行了 addNum() 函數,這個函數使用了 synchronized 關鍵字修飾,因此保證了在同一時刻只能有一個線程執行它。最后輸出 num 變量的值,我們會發現它的值一定是 20000,這就是同步鎖的作用。
上一篇java cs和bs
下一篇vue怎么獲取時間