1. 程式人生 > >java生成16位唯一值做主鍵

java生成16位唯一值做主鍵

僅限一臺伺服器

關於多個表主鍵的生成,在不建議擴充套件主鍵長度的前提下,通過對時間戳加鎖來解決主鍵重複問題

import org.apache.commons.lang.StringUtils;

import com.fto.sql.UniqueTimestamp;

public class Test {
	public static UniqueTimestamp UT = new UniqueTimestamp();

	public static String generateId() {
		synchronized (UT) {
			return StringUtils.leftPad(Long.toHexString(UT.getUniqueTimestamp()).toUpperCase(), 16, '0');
		}
	}

	public static void main(String[] args) {
		for (int i = 0; i < 100; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					System.out.println(generateId());
				}
			}).start();
		}
	}
}

從100個執行緒同時執行的結果來看,沒有重複,但是目前還有幾個疑問:

1.會不會出現兩次執行時間差小於時間戳最小單位?

2.雖然可能解決了問題,但是效率是否降低影響整體?

3.回到問題,除了此方法,是否可以生成16位唯一值?

相關推薦

java生成16唯一做主

僅限一臺伺服器關於多個表主鍵的生成,在不建議擴充套件主鍵長度的前提下,通過對時間戳加鎖來解決主鍵重複問題import org.apache.commons.lang.StringUtils; import com.fto.sql.UniqueTimestamp; publ

java通過UUID生成16唯一訂單號

import java.util.UUID;   public class T {         public static String getOrderIdByUUId() {             int machineId = 1;//最大支援1-9個叢集機器部署

java 利用ID生成唯一驗證碼

package com.hqjl.componentconfig.util; import java.util.Random; /** * @author chunying */ public class ShareCodeUtil { /** * 邀請碼生成器,演算法原理: * 1)

java利用UUID生成16的字串

廢話不說  直接上程式碼 /** * 獲取16位隨機字串 * @return String */ public static String getUUID() { String uuid= UUID.randomUUID().toString(); char[]

Java 生成16/32 MD5

注意!網上廣為流傳的MD5計算的版本,與標準MD5計算結果不同(原因可能是編碼方式的不同)。請注意甄別。 以下程式碼是經過測試的正確版本。 private static final char HEX

C# Guid 16 唯一

mar sta bsp guide string gui ram 序列 guid public static class GuidExtentions { /// <summary> /// 根據GUID獲取1

隨機生成16顏色

顏色 creat return eat ret += mat turn 隨機 createRandomColor() {   let color = Math.floor((Math.random() * 256 * 256 * 256)).toString(16)   w

Java 生成隨機驗證碼

驗證碼在平時用到的很多,簡單記錄一下生成四位隨機驗證碼的核心程式碼: 生成四位驗證碼(數字與字母混合) String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; StringBuilder sb=new StringBuilder(4);

生成16的key(筆記)

public static void main(String[] args) { String keyStr = "root"; byte[] keys; try { keys = keyStr.getBytes("UTF-8");

java生成UUID通用唯一識別碼 (Universally Unique Identifier)

UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標準,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織在分散式計算環境 (Distributed Computing

Java生成6隨機數驗證碼

第一種方法:/** * //生成6位隨機數,測試多次後有產生5位隨機數的bug */ public static int randomCode() { StringBuilder str = new StringBuilder(); Random random = new Ran

java生成4不重複字元(包含大寫字母、小寫字母、數字)

需要生成4位不重複的字元作為唯一引數,要求只能使用大寫字母、小寫字母和數字的組合。大寫字母26個、小寫字母26個、10個數字共62個字元。不重複排列個數:62*62*62*62=14776336個。 /** * * @author wzp * 2016-3-18

學以致用——Java原始碼——16以內任意整數的逆序數的輸出(Reversing Digits)

這道題其實並不簡單,涉及: 1. 整數位數的計算 2. 整數各個位數的值的計算 3. 整數的構成 遺留問題:Java long資料型別最大支援Long.MAX_VALUE = 9223372036854775807(共19位),但經過測試,本程式僅支援16位以內的計算,超過後會發

生成16密碼

package com.grcaeup; import java.util.Random; /** * 隨機生成8位密碼 工具類 * */ public class RandomPasswordUtils { private

C/C++ int 高16,低16 //int 高16,低16

因工作的關係,我需要對一個int型別的變數的低16位和高16位分別賦值, 百度了一下,沒找到相關文章,還是自己動手實現吧! 程式碼如下: #include "stdafx.h" #include <stdio.h> int main(int argc, c

java生成驗證碼

import java.util.Random; public class random { public static String getrandom(){ String code = ""; Random random = new Random(); for (i

java16或32MD5加密

import java.security.MessageDigest; /** * @Description:MD5加解密工具 * @author:liuyc * @time:2016年5月23日 上午11:11:16 */ public class MD5Hel

AE中獲取資料表中某欄唯一

{ 9              // 得到IFeatureCursor遊標 10             IFeatureCursor pCursor = pFeatureClass.Search( null , false );11 12              // coClass物件例項生成 13

Java 生成N隨機數的方法

最近專案中有一個需求:在自增的id後加上N位隨機數,提高安全性,自己寫了一個簡單的實現方式。 思路: 通過JDK 的Math.random()函式生成一個[0,1]範圍內的隨機數,將這個隨機數乘以 9

java生成6隨機數的5種方法

1. 用math.random()實現,比較麻煩的一種方式,思路是:math.random()生成的是[0.0, 1.0)的偽隨機數,如果 當前值是0.9...,則直接*1000000返回,其他情況可能生成0.8...,0.03...,0.0003...,這些情況都*100