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