色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java 原子性和同步鎖

Java 中的原子性和同步鎖是非常重要的概念,下面我們來(lái)具體了解一下:

1. 原子性

原子性是指一個(gè)操作是不可中斷的,即使在多線程的情況下,一個(gè)操作具有原子性,也不會(huì)被其它線程打斷。例如,對(duì)于普通的變量 i,它的 ++ 操作不具有原子性,因?yàn)檫@個(gè)操作分為兩步:先將 i 取出,然后加上1。如果同時(shí)有兩個(gè)線程對(duì) i 進(jìn)行 ++ 操作,就會(huì)出現(xiàn)沖突。

2. 同步鎖

同步鎖是用來(lái)保證代碼塊在多線程環(huán)境中的同步執(zhí)行的,即在同一時(shí)刻只能有一個(gè)線程進(jìn)入代碼塊。synchronized 就是 Java 中實(shí)現(xiàn)同步鎖的關(guān)鍵字,它可以用來(lái)修飾一個(gè)代碼塊或一個(gè)方法。

下面我們來(lái)看一個(gè)例子:

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++;
}
}

這個(gè)例子中,我們創(chuàng)建了兩個(gè)線程 t1 和 t2,將一個(gè)靜態(tài)變量 num 作為共享變量傳遞給它們。然后我們?cè)谶@兩個(gè)線程中都執(zhí)行了 addNum() 函數(shù),這個(gè)函數(shù)使用了 synchronized 關(guān)鍵字修飾,因此保證了在同一時(shí)刻只能有一個(gè)線程執(zhí)行它。最后輸出 num 變量的值,我們會(huì)發(fā)現(xiàn)它的值一定是 20000,這就是同步鎖的作用。