随机数字工具类
示例代码:
import java.math.BigDecimal;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicLong;
/**
* 随机数字工具类
*/
public final class RandomNumberUtil {
private static AtomicLong id;
/**
* 简单生成Long类型, 大数据量下无法做到唯一
*/
public synchronized static Long getId() {
Long time = Long.valueOf(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())) * 10000;
if (id == null) {
id = new AtomicLong(time);
return id.get();
}
if (time <= id.get()) {
id.addAndGet(1);
} else {
id = new AtomicLong(time);
}
return id.get();
}
/**
* 生成[1, max]的随机值
*
* @param max
* @return
*/
public static Integer randomRange(Integer max) {
SecureRandom rm = new SecureRandom();
rm.setSeed(getId());
return rm.nextInt(max) + 1;
}
/**
* 生成[min, max]的随机值
*
* @param min
* @param max
* @return
*/
public static Integer randomRange(Integer min, Integer max) {
SecureRandom rm = new SecureRandom();
rm.setSeed(getId());
return rm.nextInt(max) + min;
}
/**
* 随机生成指定范围BigDecimal
*/
public static BigDecimal randomBigDecimal(float minF, float maxF) {
//生成随机数
BigDecimal db = new BigDecimal(Math.random() * (maxF - minF) + minF);
//返回保留两位小数的随机数。不进行四舍五入
return db.setScale(2, BigDecimal.ROUND_UP);
}
/**
* 随机生成指定范围BigDecimal
*/
public static BigDecimal randomBigDecimal(float minF, float maxF, int bits) {
//生成随机数
BigDecimal db = new BigDecimal(Math.random() * (maxF - minF) + minF);
//返回保留两位小数的随机数。不进行四舍五入
return db.setScale(bits, BigDecimal.ROUND_UP);
}
public static void main(String[] args) throws InterruptedException {
Set<Long> set = new TreeSet<>();
for (int i = 0; i < 100; i++) {
new Thread(() ->
{
Long id = getId();
set.add(id);
System.out.println(Thread.currentThread().getName() + ":" + id);
}
).start();
}
Thread.sleep(5000);
int size = set.size();
System.out.println(size);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现