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参数
//使用悲观锁来获取
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
原文:https://www.cnblogs.com/ruigege0000/p/14077330.html