时间戳的唯一性生成

需求场景:

需要使用时间戳来命名上传图片名称,同时以时间戳知道上传时间
问题:
1.一个进程某个时间点多次请求(图片批量上传),生成时间戳时,时间戳重复
2.当多进程请求(多用户请求)生成时间戳时,时间戳重复

解决方法:

1.针对第一个,在方法内添加几毫秒的延时(Thread.sleep(3))
2.针对第二个,对方法添加同步锁(synchronized)

验证1:同个时间点多次请求

public class MyTest {
    public static void main(String[] args) {
        MyThread t1 = new MyThread();
        MyThread t2 = new MyThread();
        MyThread t3 = new MyThread();
        t1.start();
        //t2.start();
        //t3.start();

    }
}
public class MyThread extends Thread{
    static int num=0;

    @Override
    public void run() {
        while (true){
            if(num<99){
                num++;
                //test_sync();
                test();
            }else {
                break;
            }
        }
    }

    public static void test(){
        System.out.println(num +"当前时间"+ System.currentTimeMillis());
        try {
            Thread.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

没有添加延时,存在相同的时间戳
1当前时间1690876719760
2当前时间1690876719762
3当前时间1690876719763
4当前时间1690876719763

5当前时间1690876719766
6当前时间1690876719767
7当前时间1690876719767
8当前时间1690876719767

9当前时间1690876719768

添加Thread.sleep(3)后,没有重复的时间戳

1当前时间1690876866280
2当前时间1690876866285
3当前时间1690876866316
4当前时间1690876866321
5当前时间1690876866324
6当前时间1690876866332
7当前时间1690876866336
8当前时间1690876866340
9当前时间1690876866363

验证2:添加同步锁

//多个进程请求
t1.start();
t2.start();
t3.start();
public static synchronized void test_sync(){
        System.out.println(num +"当前时间"+ System.currentTimeMillis());
        try {
            Thread.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

未加同步锁,存在重复时间戳
1当前时间1690877099584
2当前时间1690877099593
3当前时间1690877099603
4当前时间1690877099604
5当前时间1690877099604

6当前时间1690877099606
7当前时间1690877099608
8当前时间1690877099608

9当前时间1690877099609

test_sync();
//test();

添加同步锁后没有重复的时间戳

1当前时间1690877244878
3当前时间1690877244882
5当前时间1690877244892
6当前时间1690877244895
7当前时间1690877244898
8当前时间1690877244901
9当前时间1690877244904
9当前时间1690877244909
9当前时间1690877244913

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值