package com.ruigege.OtherFoundationOfConcurrent2;
public class FiledLong {
public volatile long value =0L;
public long p1,p2,p3,p4,p5,p6;
}
@sun.misc.Contended
class FiledLong2{
public volatile long value=0L;
}
注意點:@Contended註解只能用於Java的核心類,好比rt包下的類,若是用戶的類須要使用這個註解的時候,須要添加JVM的參數:-XX:-RestrictContended,填充的默認寬度爲128,要自定義寬度能夠設置-XX:ContendedPaddingWidth參數git
//使用悲觀鎖來獲取
EntryObject entry = query("select * from table1 where id =#{id} for update",id);
//修改記錄內容,根據計算修改entry記錄的屬性
String name=generatorName(entry);
entry.setName(name);
//update操做
int count = updateZ("update table1 set name=#{name},age=#{age} where id=#{id}",entry);
return count;
package com.ruigege.OtherFoundationOfConcurrent2;
public class UpdateEntry2 {
public int updateEntry(long id) {
//使用樂觀鎖獲取指定記錄
EntryObject entry = query("select * from table1 where id=#{id}",id);
//
String name = generatorName(entry);
entry.setName(name);
//update操做
int count = update("update table1 set name=#{name},age=#{age},version=${version}+1 where id=#{id} and version =#{version}",entry);
return count;
}
}
package com.ruigege.OtherFoundationOfConcurrent2;
public class updateEntry3 {
boolean result = false;
int retryNum = 5;
while(retryNum>0) {
//使用樂觀鎖獲取記錄
EntryObject entry = query("select * from table1 where id=#{id}",id);
String name = generatorName(entry);
entry.setName(name);
//update操做
int count = update("update table1 set name=#{name},age=#{age},version=${version}+1 where id=#{id} and version =#{version}",entry);
//返回的行若是不是0的話說明更新成功了,那麼即刻跳出循環
if(count == 1) {
result = true;
break;
}
retryNum--;
}
return result;
}
https://github.com/ruigege66/ConcurrentJava