怎么計算每個線程執(zhí)行的次數(shù) r7 1700相當(dāng)于幾代i7?
r7 1700相當(dāng)于幾代i7?第四代從性能上看,AMD銳龍R7 1700 8核16線程相當(dāng)于Intel s酷睿i7-4960X。是第四代i7級別的CPU,6核12線程,22 nm工藝制造。redis
r7 1700相當(dāng)于幾代i7?
第四代
從性能上看,AMD銳龍R7 1700 8核16線程相當(dāng)于Intel s酷睿i7-4960X。是第四代i7級別的CPU,6核12線程,22 nm工藝制造。
redis公平鎖原理?
鎖執(zhí)行的原子性主要通過鎖定lua腳本和設(shè)置到期時間來保證。然后,每個線程將獲取鎖1次,釋放鎖-1次,如果為0,則表示鎖釋放成功。
可重入原則與JDK的可重入鎖是一致的。
JDK也有公平鎖和不公平鎖。所謂的公平鎖是為了確保客戶端獲得鎖的順序與他們請求鎖的順序相同。公平鎖需要排隊。誰先申請這個鎖,誰就能先拿到,按請求的順序。
多線程查詢數(shù)據(jù)庫?
如果Excel文件中有很多記錄,可以考慮使用多線程。您可以考慮在多線程設(shè)計模式中使用生產(chǎn)者-消費者模式。
首先專門創(chuàng)建一個線程(一個就夠了,多了沒用,以下簡稱Reader線程),負(fù)責(zé)讀取Excel文件中的記錄。比如使用第三方工具POI,此時讀取的Excel記錄是一個Java對象。每次線程讀取一條記錄時,都會將它存儲在一個隊列中(比如ArrayBlockingQueue)。它只負(fù)責(zé)讀取記錄并將它們存儲在隊列中,其他什么都不做。
其次,多設(shè)置幾個線程(如果一個就夠了,就一個。最好不要超過系統(tǒng)中CPU的數(shù)量。
,以下簡稱處理器線程),這些線程負(fù)責(zé)從上面的隊列中取記錄(對象),然后檢查記錄中的數(shù)據(jù)并寫入數(shù)據(jù)庫(這里我假設(shè)導(dǎo)入目標(biāo)是數(shù)據(jù)庫,你的問題沒有指定導(dǎo)入目標(biāo)是什么)。
最后,在Reader線程讀取了所有記錄之后,需要 "通知 "處理器線程:當(dāng)您處理完所有記錄后,您可以停止。這可以借助多線程設(shè)計模式中的兩階段終止模式來實現(xiàn)。主要思想是為要停止的線程(目標(biāo)線程,這里是處理器線程)設(shè)置一個停止標(biāo)志,并設(shè)置一個變量表示目標(biāo)線程的工作任務(wù)數(shù)(這里是需要處理多少條記錄)。當(dāng)目標(biāo)線程檢測到要處理的任務(wù)數(shù)為0并且線程停止標(biāo)志設(shè)置為真時,可以停止線程。
兩階段終止模式參考這里:Java多線程編程模式實用指南(三):兩階段終止模式。
。更多細(xì)節(jié),請參考我的新書。最后,相應(yīng)地注意產(chǎn)品的粒度。也就是說,什么對象是 "產(chǎn)品和服務(wù)由讀取器線程存儲在隊列(傳輸通道)中?是一條Excel記錄還是多條Excel記錄?一般來說,為了減少產(chǎn)品在隊列中移動的次數(shù)(減少相應(yīng)的開銷),產(chǎn)品的粒度應(yīng)該設(shè)置得比較粗。例如,創(chuàng)建一個容器對象來存儲多條記錄。