gpt4 book ai didi

java - 此代码线程对于 Java 中的唯一 ID 是否安全

转载 作者:行者123 更新时间:2023-11-30 08:16:37 25 4
gpt4 key购买 nike

我有一个简单的代码,我希望在其中生成具有唯一 ID 的对象。这是代码片段

public class Test {

private static long counter = 0;
private long id;

private Test() {
// Don't worry about overflow
id = counter++;
}

// Will this method always Test Object with unique id?
public static Test getTest() {
return new Test();
}

public long getId() {
return id;
}

}

想知道如果 getTest 方法被多个线程调用,是否所有的 TestObjects 都有唯一的 id?

最佳答案

它不是线程安全的,因为两个线程可以同时执行 counter++,您可能会得到意想不到的结果。

你应该使用 AtomicInteger:

public class Test {

private static AtomicLong counter = new AtomicLong(0);
private long id;

private Test() {
// Don't worry about overflow
id = counter.incrementAndGet();
}

// Will this method always Test Object with unique id?
public static Test getTest() {
return new Test();
}

public long getId() {
return id;
}
}

关于java - 此代码线程对于 Java 中的唯一 ID 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28208592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com