/** * @author Geek_Soledad (66704238@51uc.com) */public interface IdGeneratorT> { /** * 生成下一个id并返回。 * * @return 返回新的id. */ public T next();}/** * long 类型的自增长ID生成类,支持多线程。
Long
Id
-智能简单的Java UU
ID
生成
器
替换为自动递增的
ID
,尤其是在多服务器多数据中心环境中。
为响应Snowflake和Snowizard的复杂性而创建,它只是一个
类
。
当用作主键时,SQL插入将始终在表的底部
ID
始终大于以前的
ID
算法:currentTimeMillis&intraMilliCounter&server
Id
8byte Java“长”结果,非常适合主键
单台或多台服务器
不需要服务器协调
使用server
Id
(0-4095)实例化以100%保证唯一性
每台服务器每秒256,000个唯一
ID
适用于1970年至2557年
long
Id
包含时间戳-> getDate(
long
Id
)
long
Id
包含server
Id
-> getServer
Id
(
long
Id
)
将源代码复制到您的代码中
编译'com.comm
1、在
多线程
中++i和i++是线程不安全的,解决方式:①、synchronized加锁修饰 ②、AtomicXXX ③、
Long
Adder
AtomicXXX比synchronized效率高的原因是AtomicXXX是无锁的CAS操作;
Long
Adder比AtomicXXX效率高的原因是
Long
Adder是分段锁(分段锁也是无锁的CAS操作)
public class Thread_006_SyncVsAtomicXXXVs
Long
Adder {
static
Long
syncCount = 0
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoIncKey {
package com.shijie.culture.api.community.primarykey;
import ...
例子:对系统数据库中的订单信息新增的时候,对一个订单号字段的值进行递增
比如订单号字段为:YY_00000001,新建订单时。要读取数据库现有最新的订单号,然后将String
类型
正则取出8位的流水订单号,然后转化成
Long
类型
,然后
自增
1,然后将
Long
类型
的数据转化成String
类型
,并且拼凑订单的固定开头即可,
Long
转String时还需要补0(补零)
Object order_number = orderNumber.get("order_number");
if (order_number != n
一、问题描述
1.之前一直使用Mysql数据库,对oracle不算太熟悉,由于接第三方系统,他们的一个标识是
LONG
类型
的
自增
字段,然后在设计数据库表结构的时候,发现oracle也有这个
LONG
类型
,也没有做事前评估,直接创建啦。下面是建表语句的示例:
CREATE TABLE "TZTEST_OWN"."TEST_
LONG
_TABLE" (
"
ID
" VARCHAR2(20 BYTE)...
最近学习
多线程
下的整数
自增
,很好理解:
场景: 一个点击需求,用10个线程模拟10个用户同时点击,每个线程点击10 0000次, 那么实际上一共是点击100 0000 次。
下面分别使用无锁(结果肯定错误), mutex,_InterlockedIncrement, atomic 测试:
for (t = ; t < NUM_THREADS; t++) {
printf("Creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, print_hello, (vo
id
*)t);
if (rc) {
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
pthread_exit(NULL);
希望对您有帮助。