class ABC{
private static Random random = new Random();
private static AtomicLong uniqueLongId = new AtomicLong(System.currentTimeMillis());
public static long getUniqueLongId(){
long id = uniqueLongId.incrementAndGet();
long uniqueID = Math.abs(random.nextLong()) + id;
return uniqueID;
//the above code we can write in one line
//return Math.abs(random.nextLong())+uniqueLongId.incrementAndGet();
}
}
上述方法 getUniqueLongId() 是否会在多线程环境中为我提供唯一 ID。我关心的是:知道 uniqueLongId 是原子的并假设调用 incrementAndGet() 将是线程安全的调用,但代码的另一部分是不同步的。这不意味着方法 getUniqueLongId() 本身不是线程安全的吗?因此可能不一定会返回唯一的 ID?
请解释..