Легко, если вы несколько ограничены.
Если у вас есть один поток, вы просто используете uniqueID ++; Обязательно сохраните текущий уникальный идентификатор при выходе.
Если у вас несколько потоков, работает общий синхронизированный метод generateUniqueID (реализован так же, как и выше).
Проблема в том, что у вас много процессоров - либо в кластере, либо в какой-то распределенной установке, например, в одноранговой игре.
В этом случае вы обычно можете объединить две части в одно число. Например, каждому процессу, который генерирует уникальный идентификатор, может быть назначен свой собственный 2-байтовый номер идентификатора, а затем объединить его с уникальным идентификатором ++. Что-то вроде:
return (myID << 16) & uniqueID++
Распределение части myID может быть сложно, но есть несколько способов. Вы можете просто извлечь один из централизованной базы данных, запросить уникальный идентификатор с централизованного сервера, ...
Если у вас есть Long вместо Int, одним из распространенных приемов является получение идентификатора устройства (UUID) ETH0, который гарантированно уникален для сервера, а затем просто добавьте серийный номер. *