java項(xiàng)目實(shí)現(xiàn)流水號(hào)自動(dòng)增長(zhǎng)
在濟(jì)寧等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營(yíng)銷,外貿(mào)網(wǎng)站制作,濟(jì)寧網(wǎng)站建設(shè)費(fèi)用合理。
項(xiàng)目中有一個(gè)規(guī)則編號(hào)字段,從1開始,編號(hào)長(zhǎng)度為5位,那么第一條數(shù)據(jù)編號(hào)就是00001。
實(shí)現(xiàn)的基本思路就是項(xiàng)目啟動(dòng)時(shí),從數(shù)據(jù)庫(kù)獲取當(dāng)前最大值,作為靜態(tài)變量存儲(chǔ);
業(yè)務(wù)獲取新的編碼,考慮并發(fā)問(wèn)題,獲取編碼方法(編碼自增部分)為synchronized同步方法,如果自增為原子操作,則無(wú)需同步;
編碼前置0,使用String.format("%05d", newNum);格式化獲取。
實(shí)現(xiàn)代碼如下:
private final static AtomicInteger atomic = new AtomicInteger(0);
public static String startFormat(String format) {
return String.format(format, atomic.incrementAndGet());
}
JAVA中如何保證線程安全以及主鍵自增有序
一、常見場(chǎng)景
多個(gè)線程針對(duì)一個(gè)i進(jìn)行主鍵自增。多線程下如果不做安全策略,將會(huì)導(dǎo)致各個(gè)現(xiàn)成獲取的i值重復(fù),導(dǎo)致臟數(shù)據(jù)
常見策略
1、增加syschroize進(jìn)行線程同步
2、使用lock、unlock處理
3、使用reetrantent 鎖進(jìn)行鎖定
缺點(diǎn):容易造成性能低下,或者編寫代碼容易造成死鎖
二、新方案
jdk新提供的功能,atomicInteger(還有其他一atomic開頭的原子性操作類)
AtomicInteger,一個(gè)提供原子操作的Integer的類。在Java語(yǔ)言中,++i和i++操作并不是線程安全的,在使用的時(shí)候,不可避免的會(huì)用到synchronized關(guān)鍵字。而AtomicInteger則通過(guò)一種線程安全的加減操作接口。
原理:通過(guò)java的CAS compare and swap,簡(jiǎn)稱cas原語(yǔ)進(jìn)行操作提升性能,這個(gè)也號(hào)稱樂(lè)觀鎖,不阻塞
觀鎖實(shí)際上并不加鎖,當(dāng)計(jì)算遇到?jīng)_突或者說(shuō)前后不一致時(shí)會(huì)重試 直到成功
CAS有3個(gè)操作數(shù) 內(nèi)存值V 要跟內(nèi)存值做比較的值A(chǔ) 和 新值 B
[html]?view plain?copy
while(true){
if(V?==?A){
V?=?B;
return?;
}else{
A?=?V;
}
}
CAS的操作對(duì)象為volatile類型
volatile類型變量是:CPU直接讀寫變量所在的內(nèi)存 而不是把變量copy到寄存器操作
這樣對(duì)變量的操作所有線程都是可見的
這樣做的結(jié)果是減少了并發(fā)時(shí)沖突的概率 但不能完全避免
如果是自增字段,從一開始就不能手動(dòng)寫代碼set值,只能使用自增。如果你手動(dòng)set一個(gè)1,而字段沒(méi)自增過(guò),那么下次字段就會(huì)自增為1,這樣兩個(gè)值就沖突了。解決辦法是將表重新構(gòu)建一下,或?qū)⒆栽龀跏贾翟O(shè)為0,讓他從頭開始自增,而程序中凡是認(rèn)為set值的地方都去掉,在sql語(yǔ)句中不要insert這個(gè)字段
本文標(biāo)題:java代碼維護(hù)自增長(zhǎng)的簡(jiǎn)單介紹
當(dāng)前路徑:http://m.rwnh.cn/article40/doopoeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、ChatGPT、全網(wǎng)營(yíng)銷推廣、用戶體驗(yàn)、做網(wǎng)站、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)