Come gli altri hanno scritto, a lungo non ha spazio sufficiente per un numero univoco. Ma in molti casi un numero può essere abbastanza unico per un uso specifico. Ad esempio, un timestamp con precisione al nanosecondo è spesso sufficiente. Per farlo, spostare i millisecondi correnti 20 bits da allocare spazio per nanosecondi e quindi sovrapposizione con nanosecondi:
(System.currentTimeMillis() << 20) | (System.nanoTime() & ~9223372036854251520L);
Il nano & ~ 9223372036854251520L parte prende nanosecondi corrente e imposta i primi 44 byte a 0, lasciando solo il giusto 20 bit che rappresentano nanosecondi fino a un millisecondo (999999 nano) è lo stesso:
nanoseconds & ~1111111111111111111111111111111111111111111100000000000000000000
Lato nota: nanosecondi non devono essere utilizzate per rappresentare la corrente tempo perché il loro punto di partenza non è fisso nel tempo e perché vengono riciclati quando raggiungono il massimo.
È possibile utilizzare qualsiasi altra manipolazione di bit. Di solito è bene prendere in considerazione l'ora corrente e qualcos'altro come l'ID corrente del thread, id di processo, ip.
fonte
2016-05-19 15:57:19
Perché non usi la sequenza? Sei in grado di usare cose del genere? O UUID questa è una soluzione che devi usare? –
puoi spiegare di più sulla sequenza –
Che DB usi? Quale framework db usi (JDBC, Hibernate, myBatis)? – Taky