我使用UUID.randomUUID().toString()将一个唯一值附加到最终存储在数据库中的字符串,并对其具有唯一约束

但是因为我的应用程序是多线程的,所以执行在UUID生成的同时发生,并且最终将相同的UUID附加到字符串并且持久性失败.

有没有更好的方法来生成随机字符串,即故障安全方法.

我尝试调试,当我暂停其他线程并让它们一个接一个地运行时,它运行正常.

我目前正在使用以下代码使其更随机,但我不喜欢这种方法.

Random r = new Random();

List uniqueNUmbers = new ArrayList<>();

for (int i=0;i<10;i++) {

int x=r.nextInt(9999);

while (uniqueNumbers.contains(x))

x=r.nextInt(9999);

uniqueNumbers.add(x);

}

String string = String.format("%04d", uniqueNumbers.get(0));

string = uuid + string;

但这就像一个hacky代码.我不喜欢这个.

有没有人知道实际生成随机字符串的防错方法.

最佳答案 您可以同步uuid-generation方法,和/或您可以在池开始耗尽时预先生成uuid池并在一个线程中生成更多标识符.

java uuid 线程安全_java – 在多线程应用程序中生成相同的UUID相关推荐

  1. 在多线程应用程序中使用循环缓冲区高效地进行日志记录

    在多线程应用程序中使用循环缓冲区高效地进行日志记录 在关键的计算机应用程序的生存期中,日志记录是一件非常重要的活动,特别是当故障的症状并不十分明显时.日志记录提供了故障前应用程序状态的详细信息,如变量 ...

  2. java游戏输赢统计_java利用多线程和Socket实现猜拳游戏

    本文实例为大家分享了利用多线程和Socket实现猜拳游戏的具体代码,供大家参考,具体内容如下 实例:猜拳游戏 猜拳游戏是指小时候玩的石头.剪刀.布的游戏.客户端与服务器的"较量", ...

  3. java创建线程代码_Java创建与结束线程代码示例

    本文讲述了在Java中如何创建和结束线程的最基本方法,只针对于Java初学者.一些高级知识如线程同步.调度.线程池等内容将会在后续章节中逐步深入. 创建线程 创建普通线程有两种方式,继承Thread类 ...

  4. java让线程空转_Java锁:悲观/乐观/阻塞/自旋/公平锁/闭锁,锁消除CAS及synchronized的三种锁级别...

    JAVA LOCK 大全 [TOC] 一.广义分类:乐观锁/悲观锁 1.1 乐观锁的实现CAS (Compare and Swap) 乐观锁适合低并发的情况,在高并发的情况下由于自旋,性能甚至可能悲观 ...

  5. java web 线程数_Java Web应用调优线程池

    最简单的单线程 我们先从基础开始.无论使用哪种应用服务器或者框架(如Tomcat.Jetty等),他们都有类似的基础实现.Web服务的基础是套接字(socket),套接字负责监听端口,等待TCP连接, ...

  6. java定时线程池_java 定时器线程池(ScheduledThreadPoolExecutor)的实现

    前言 定时器线程池提供了定时执行任务的能力,即可以延迟执行,可以周期性执行.但定时器线程池也还是线程池,最底层实现还是ThreadPoolExecutor,可以参考我的另外一篇文章多线程–精通Thre ...

  7. java 并发 线程安全_Java并发教程–线程安全设计

    java 并发 线程安全 在回顾了处理并发程序时的主要风险(例如原子性或可见性 )之后,我们将通过一些类设计来帮助我们防止上述错误. 其中一些设计导致了线程安全对象的构造,从而使我们能够在线程之间安全 ...

  8. java 队列线程池_JAVA工作队列与线程池

    为什么要使用线程池? 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协议 ...

  9. java数据同步解决方案_Java实现多线程数据同步的几种方法

    1. 应用背景 程序在设计当中如果采取多线程操作的时候,如果操作的对象是一个的话,由于多个线程共享同一块内存空间,因此经常会遇到数据安全访问的问题,下面看一个经典的问题,银行取钱的问题:1).你有一张 ...

最新文章

  1. JAVA移慎_谨慎使用Java8的默认方法
  2. php 解析 saml协议,解出SAMLRequest的代码示例
  3. 2018宁夏邀请赛 - Copy and Submit II(推公式)
  4. 用promise封装ajax_ES6-promise封装AJAX请求
  5. 离群点检测方法_干货 :时间序列异常检测
  6. 第七讲 虚拟机模板及大规模部署虚拟机
  7. Mysql数据表的操作
  8. 处理服务器故障的前5分钟(转)
  9. 课程《设计模式之美》笔记之关于java四大特性
  10. VS2012 注册密钥
  11. IMX8 Audio声卡
  12. AVS2音视频编码标准
  13. 手机日历怎么备注农历生日提醒
  14. 翟菜花:搭上营销快通车的乳业,又是如何玩转互联网营销时代的?
  15. 【JAVA】-- 黄金矿工小游戏(二)(实现思路+每步代码)
  16. 电缆 电流_如何不用电缆观看每项运动(运动返回时)
  17. 计算机逻辑功能测试及应用,逻辑门电路的逻辑功能及测试.doc
  18. html设置pdf预览名字,浏览器预览PDF文件的个性化设置
  19. “该设备正在使用中。请关闭可能使用该设备的所有程序或窗口 然后重试” 解决步骤
  20. verilog study-初级

热门文章

  1. java 交换两个数的值(临时变量,加减,异或)
  2. SpringBoot —— Bean的注入方式
  3. GFM与博客园markdown测试
  4. JAXP进行DOM和SAX解析
  5. OAuth 2.0(网转)
  6. 洛谷 P1736 创意吃鱼法
  7. 基于SuperSocket的IIS主动推送消息给android客户端
  8. .NET:如何让线程支持超时?
  9. 公司人才招聘管理系统
  10. dedecms织梦最新0day