日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python将数据导入数据库 atomic_使用Atomic

發布時間:2023/12/16 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python将数据导入数据库 atomic_使用Atomic 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java的java.util.concurrent包除了提供底層鎖、并發集合外,還提供了一組原子操作的封裝類,它們位于java.util.concurrent.atomic包。

我們以AtomicInteger為例,它提供的主要操作有:

增加值并返回新值:int addAndGet(int delta)

加1后返回新值:int incrementAndGet()

獲取當前值:int get()

用CAS方式設置:int compareAndSet(int expect, int update)

Atomic類是通過無鎖(lock-free)的方式實現的線程安全(thread-safe)訪問。它的主要原理是利用了CAS:Compare and Set。

如果我們自己通過CAS編寫incrementAndGet(),它大概長這樣:

public int incrementAndGet(AtomicInteger var) {

int prev, next;

do {

prev = var.get();

next = prev + 1;

} while ( ! var.compareAndSet(prev, next));

return next;

}

CAS是指,在這個操作中,如果AtomicInteger的當前值是prev,那么就更新為next,返回true。如果AtomicInteger的當前值不是prev,就什么也不干,返回false。通過CAS操作并配合do ... while循環,即使其他線程修改了AtomicInteger的值,最終的結果也是正確的。

我們利用AtomicLong可以編寫一個多線程安全的全局唯一ID生成器:

class IdGenerator {

AtomicLong var = new AtomicLong(0);

public long getNextId() {

return var.incrementAndGet();

}

}

通常情況下,我們并不需要直接用do ... while循環調用compareAndSet實現復雜的并發操作,而是用incrementAndGet()這樣的封裝好的方法,因此,使用起來非常簡單。

在高度競爭的情況下,還可以使用Java 8提供的LongAdder和LongAccumulator。

小結

使用java.util.concurrent.atomic提供的原子操作可以簡化多線程編程:

原子操作實現了無鎖的線程安全;

適用于計數器,累加器等。

總結

以上是生活随笔為你收集整理的python将数据导入数据库 atomic_使用Atomic的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。