Java ??? ??? ??? ??? ??? ??? ??? ???? ??????
May 04, 2024 pm 04:51 PMJava ???? ??? ???? ???? ? ?? ??: ??? ??: ???? ????? ?? ??? ???? ?? ???? ?? ???? ???? ??? ???? ?????. (??? ???) ??? ??: ???? ?? ? ???? ???? ??? ??? ?? ???? ??? ?? ????? ?????. (java.util.concurrent.atomic ???? Atomic ???)
Java ???? ??? ??? ??? ?? ???? ??? ???? ???? ??? ??????
??? ???? ????? ???? ?? ???? ??? ???? ???? ? ??? ???? ???? ?????. Java??? ??? ??? ??? ??? ??? ???? ???? ? ?? ?? ???????. ????? ?? ??? ???? ?? ??? ?????.
??? ??
??? ??? ???? ?? ???? ?? ???? ??? ? ??? ??? ???? ???. ??? ???? ??????? ??? ???? ??? ??? ??? ?? ???? ???? ???? ? ??? ???. ??? ??? ??? ??? ???? ??? ? ??? ????, ?? ??? ?? ??? ??? ? ??? ??? ????.
synchronized
???? Java?? ??? ??? ???? ???? ?????. ?? ??? ?? ???? ???? ??? ??? ???? ?? ??? ??? ? ????. synchronized
關(guān)鍵字是 Java 中實(shí)現(xiàn)悲觀鎖的常用方法。它將代碼塊標(biāo)記為臨界區(qū),只有獲取鎖的線程才能進(jìn)入該代碼塊。
public class Counter { private int count; public synchronized void increment() { count++; } public synchronized int getCount() { return count; } }
樂觀鎖
樂觀鎖基于這樣的假設(shè):當(dāng)線程訪問(wèn)數(shù)據(jù)時(shí),數(shù)據(jù)不太可能被其他線程修改。它在事務(wù)結(jié)束時(shí)才對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,如果數(shù)據(jù)被修改,則回滾事務(wù)。樂觀鎖的優(yōu)點(diǎn)是能提高并發(fā)性,缺點(diǎn)是如果數(shù)據(jù)被修改,可能會(huì)導(dǎo)致事務(wù)失敗。
在 Java 中,java.util.concurrent.atomic
包中的原子類可以實(shí)現(xiàn)樂觀鎖。原子類中的操作是原子性的,保證了并發(fā)訪問(wèn)數(shù)據(jù)的正確性。
import java.util.concurrent.atomic.AtomicInteger; public class Counter { private AtomicInteger count = new AtomicInteger(0); public void increment() { count.incrementAndGet(); } public int getCount() { return count.get(); } }
實(shí)戰(zhàn)案例:多線程銀行賬戶
為了演示悲觀鎖和樂觀鎖在實(shí)際場(chǎng)景中的應(yīng)用,我們考慮一個(gè)多線程銀行賬戶。
- 悲觀鎖實(shí)現(xiàn):
public class BankAccount { private int balance; public synchronized void withdraw(int amount) { if (balance >= amount) { balance -= amount; } } public synchronized int getBalance() { return balance; } }
- 樂觀鎖實(shí)現(xiàn):
import java.util.concurrent.atomic.AtomicInteger; public class BankAccount { private AtomicInteger balance = new AtomicInteger(0); public void withdraw(int amount) { while (true) { int currentBalance = balance.get(); if (currentBalance >= amount) { if (balance.compareAndSet(currentBalance, currentBalance - amount)) { break; } } else { break; } } } public int getBalance() { return balance.get(); } }
使用 optimistic 鎖,在取款時(shí),它會(huì)獲得當(dāng)前余額,然后嘗試使用 compareAndSet
rrreee
??? ??
??? ??? ???? ???? ???? ? ?? ???? ?? ???? ?? ??? ???? ??? ??? ???? ???. ???? ?? ??? ???? ???? ???? ???? ??? ?? ????? ?????. ??? ??? ??? ???? ???? ? ??? ????, ???? ???? ????? ??? ? ??? ??? ????. Java???java.util.concurrent.atomic
???? ?? ???? ??? ??? ??? ? ????. ?? ???? ??? ?????? ???? ?? ?? ???? ???? ?????. ??rrreee?????? ??: ?? ??? ?? ?????????? ?????? ??? ??? ??? ??? ??? ???? ?? ?? ??? ?? ??? ?????. ??- ????? ?? ??: ??
- ????? ?? ??: ??
compareAndSet
? ???? ?? ??? ????? ??? ?????. ??? ???? ??? ???? ???? ?? ?????. ????????? ?? ?? ??? ?? ??????????? ?? ?? ??? ?? ??? ?? ????? ?? ????. ???? ?? ?? ???? ???? ??? ???? ??? ?? ??? ??? ? ?????. ???? ?? ?? ???? ???? ??? ????? ?? ?? ?? ??? ???? ?? ??? ??? ? ?????. ??? ??? Java ??? ??? ??? ??? ??? ??? ??? ???? ??????? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

DeepSeek : ??? ?? ? ???? AI? ???? ??? ?????? 2025 ? ? AI?? DeepSeek? ???? ?? ???? OpenAIO1? ?? ??? ??? ??? ??? ??? ???, ?? ??? ?????. ??? ?? ???? ?? ?? ??? ?????. ? ??? ??? ???? ?? ??? ?????. DeepSeek ? ?? ?? : https://www.deepseek.com/deepseek ?? ?? ?? : ?? ?? ??? : DeepSeek? ?? ? ??? ??? ??? ?? ???? ???? ??? ????? ?????. ??? ?? : DeepSeek? ?? ?? ??? ??? ??? ????????.

Java?? ??? ??? ??? ???? ???? ??: ???: ? ???? ??? ??? ?? ?? ??? ?? ???? ?? ????? ?????. ???: ??? ??? ?? ?? ??(?: ??, ?? ? ?? ??)? ?? ????? ?? ???? ?? ???? ??? ?????.

?? ??? ?? ? Go ??? ?? Go? ?? ??? ??? ?? ???? ?????. ??? Go? ??? ? ???? ? ? ?? ??? ????. ?? ???? ???, ?? ? ???? ???? ? ????. ? ????? ? ?? ???? ??? ???? ?? ???? ??? ?? ?? ??? ?????. 1. ??? ?? Go? ???? ???? ???? ???? ???? ???? ??? ?????. ??? ???? ???? ???? ?? ?? ???? ???? ?? ???? ???? ?? ????? ????? ???? ????? ? ????. ?? ??: ???? ???? ???? ??? ?? ??? ??? ??? ????, ?? ?? CPU ???? ?? ??? ?? ????? ?????.

C++ ?? ?????? ?? ?? ? ??? ????? ?? ??? ???? ???? ?? ?? ???? ???? ??? ??? ???? ? ?????. ?? ????? ??? ????. Mutex(Mutex): ? ?? ??? ???? ?? ??? ?????? ???? ??? ??? ?? ?????. ?? ??(ConditionVariable): ???? ??? ??? ??? ??? ? ??? ?? ??? ? ??? ?????. ??? ??: ?? ?? ???? ??? ???? ?? ??? ????? ???? ??? ?????.

Atomic ???? ??? ? ?? ??? ???? ?? ???? ??? ???? ???? ? ??? Java? ?????? ??? ??????. Java? ??? ?? ?? ???? ?????. AtomicIntegerAtomicLongAtomicReferenceAtomicBoolean ??? ???? ??? ????? ???? ?? ???? ??? ?? ???? ???? ???? ???? ?????. ?? ???? ?? ???? ???? ?? ???? ?? ?? ???? ???? ? ??? ??? ??? ? ?????.

Go ?? ?? ?? ???? ?? ?? ??? ?: ??? ??: ??? ??, ?? ???? ?? ?? ???? ??? ?????. ? ?? ??: ?? ???? ? ?? ?????? ?? ?? ??? ???? ????? ?????. ?? ??: ???? ?? ?? ?? ??? ???? ?? ??? ?? ?? ??? ???, ? ??? ??? ??? ????.

Java ???? ??? ???? ???? ? ?? ??: ??? ??: ??? ???? ???? ?? ?? ???? ?? ???? ???? ?? ???? ????? ?? ??? ?????. (??? ???) ??? ??: ???? ?? ? ???? ???? ??? ??? ?? ???? ??? ?? ????? ?????. (java.util.concurrent.atomic ???? Atomic ???)

?? ??? ?? ??? ?? ???? ??? ??? ???? ? ??? ??? ?? ?????. ?? ??? ???? ?? ?? ??, ???, ??? ?? ?? ??? ???? ???. ?? ??? ?? ??? ???????, ?????, ??? ???? ?? ???? ? ????.
