189 8069 5689

java代码维护自增长的简单介绍

javastream里如何实现自增

java项目实现流水号自动增长

在济宁等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、网站设计 网站设计制作按需求定制制作,公司网站建设,企业网站建设,高端网站设计,成都全网营销,外贸网站制作,济宁网站建设费用合理。

项目中有一个规则编号字段,从1开始,编号长度为5位,那么第一条数据编号就是00001。

实现的基本思路就是项目启动时,从数据库获取当前最大值,作为静态变量存储;

业务获取新的编码,考虑并发问题,获取编码方法(编码自增部分)为synchronized同步方法,如果自增为原子操作,则无需同步;

编码前置0,使用String.format("%05d", newNum);格式化获取。

实现代码如下:

private final static AtomicInteger atomic = new AtomicInteger(0);

public static String startFormat(String format) {

return String.format(format, atomic.incrementAndGet());

}

JAVA中如何保证线程安全以及主键自增有序

JAVA中如何保证线程安全以及主键自增有序

一、常见场景

多个线程针对一个i进行主键自增。多线程下如果不做安全策略,将会导致各个现成获取的i值重复,导致脏数据

常见策略

1、增加syschroize进行线程同步

2、使用lock、unlock处理

3、使用reetrantent 锁进行锁定

缺点:容易造成性能低下,或者编写代码容易造成死锁

二、新方案

jdk新提供的功能,atomicInteger(还有其他一atomic开头的原子性操作类)

AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。

原理:通过java的CAS compare and swap,简称cas原语进行操作提升性能,这个也号称乐观锁,不阻塞

观锁实际上并不加锁,当计算遇到冲突或者说前后不一致时会重试 直到成功

CAS有3个操作数 内存值V 要跟内存值做比较的值A 和 新值 B

[html] view plain copy

while(true){

if(V == A){

V = B;

return ;

}else{

A = V;

}

}

CAS的操作对象为volatile类型

volatile类型变量是:CPU直接读写变量所在的内存 而不是把变量copy到寄存器操作

这样对变量的操作所有线程都是可见的

这样做的结果是减少了并发时冲突的概率 但不能完全避免

Java中sql 字段自增长如何用prepareStatement(sql);实现,具体见补充代码

如果是自增字段,从一开始就不能手动写代码set值,只能使用自增。如果你手动set一个1,而字段没自增过,那么下次字段就会自增为1,这样两个值就冲突了。解决办法是将表重新构建一下,或将自增初始值设为0,让他从头开始自增,而程序中凡是认为set值的地方都去掉,在sql语句中不要insert这个字段


当前名称:java代码维护自增长的简单介绍
文章网址:http://jkwzsj.com/article/doopoeo.html

其他资讯