當前位置:首頁 » 編程語言 » java唯一

java唯一

發布時間: 2025-06-13 09:48:28

java是當前唯一可用的jsp語言嗎

是。
java是當前唯一可用的jsp語言,因為系統默認java是當前唯一可用的jsp語言,可以使用javaapl,可以應用在不同的系統中。
jsp語言具有跨平台、業務代碼分離、組件重用、繼承javaservlet功能和預編譯等技術特點。

❷ java生成唯一標識符有什麼用

有時我們不依賴於資料庫中自動遞增的欄位產生唯一ID,比如多表同一欄位需要統一一個唯一ID,這時就需要用程序來生成一個唯一的全局ID,然後在資料庫事務中同時插入到多章表中實現同步.
在java中有個類工具很好的實現產生唯一ID(UUID),但是由數字和字母及中劃線組成的,故資料庫欄位應該設置為char 並相應的建立索引.
UUID是128位整數(16位元組)的全局唯一標識符(Universally Unique Identifier).
指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的.通常平台會提供生成UUID的API.UUID按照開放軟體基金會(OSF)制定的標准計算,用到了乙太網卡地址,納秒級時間,晶元ID碼和許多可能的數字.由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個 UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同),時鍾序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在於生成的結果串會比較長.關於UUID這個標准使用最普遍的是微軟的GUID(Globals Unique Identifiers).
在ColdFusion中可以用CreateUUID()函數很簡單的生成UUID,其格式為:xxxxxxxx- xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數字.而標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
,可以從cflib 下載CreateGUID() UDF進行轉換.
使用UUID的好處在分布式的軟體系統中(比如:DCE/RPC, COM+,CORBA)就能體現出來,它能保證每個節點所生成的標識都不會重復,並且隨著WEB服務等整合技術的發展,UUID的優勢將更加明顯.
關於UUID的更多信息可以多google 一下.
Java生成UUID
UUID(Universally Unique Identifier)全局唯一標識符,是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的.按照開放軟體基金會(OSF)制定的標准計算,用到了乙太網卡地址,納秒級時間,晶元ID碼和許多可能的數字.由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同),時鍾序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在於生成的結果串會比較長.
在Java中生成UUID主要有以下幾種方式:
JDK1.5
如果使用的JDK1.5的話,那麼生成UUID變成了一件簡單的事,以為JDK實現了UUID:
java.util.UUID, 直接調用即可.
UUID uuid = UUID.randomUUID();
String s = UUID.randomUUID().toString();//用來生成資料庫的主鍵id非常不錯..
Java代碼
package com.taobao.tddl.client.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;

/**
* @author huangshang
*
*/
public class UniqId {
private static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

private static Map<Character, Integer> rDigits = new HashMap<Character, Integer>(
16);
static {
for (int i = 0; i < digits.length; ++i) {
rDigits.put(digits[i], i);
}
}

private static UniqId me = new UniqId();
private String hostAddr;
private Random random = new SecureRandom();
private MessageDigest mHasher;
private UniqTimer timer = new UniqTimer();

private ReentrantLock opLock = new ReentrantLock();

private UniqId() {
try {
InetAddress addr = InetAddress.getLocalHost();

hostAddr = addr.getHostAddress();
} catch (IOException e) {
hostAddr = String.valueOf(System.currentTimeMillis());
}

if (hostAddr == null || hostAddr.length() == 0
|| "127.0.0.1".equals(hostAddr)) {
hostAddr = String.valueOf(System.currentTimeMillis());
}

try {
mHasher = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nex) {
mHasher = null;
}
}

/**
* 獲取UniqID實例
*
* @return UniqId
*/
public static UniqId getInstance() {
return me;
}

/**
* 獲得不會重復的毫秒數
*
* @return
*/
public long getUniqTime() {
return timer.getCurrentTime();
}

/**
* 獲得UniqId
*
* @return uniqTime-randomNum-hostAddr-threadId
*/
public String getUniqID() {
StringBuffer sb = new StringBuffer();
long t = timer.getCurrentTime();

sb.append(t);

sb.append("-");

sb.append(random.nextInt(8999) + 1000);

sb.append("-");
sb.append(hostAddr);

sb.append("-");
sb.append(Thread.currentThread().hashCode());

return sb.toString();
}

/**
* 獲取MD5之後的uniqId string
*
* @return uniqId md5 string
*/
public String getUniqIDHashString() {
return hashString(getUniqID());
}

/**
* 獲取MD5之後的uniqId
*
* @return byte[16]
*/
public byte[] getUniqIDHash() {
return hash(getUniqID());
}

/**
* 對字元串進行md5
*
* @param str
* @return md5 byte[16]
*/
public byte[] hash(String str) {
opLock.lock();
try {
byte[] bt = mHasher.digest(str.getBytes("UTF-8"));
if (null == bt || bt.length != 16) {
throw new IllegalArgumentException("md5 need");
}
return bt;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("unsupported utf-8 encoding", e);
} finally {
opLock.unlock();
}
}

/**
* 對二進制數據進行md5
*
* @param str
* @return md5 byte[16]
*/
public byte[] hash(byte[] data) {
opLock.lock();
try {
byte[] bt = mHasher.digest(data);
if (null == bt || bt.length != 16) {
throw new IllegalArgumentException("md5 need");
}
return bt;
} finally {
opLock.unlock();
}
}

/**
* 對字元串進行md5 string
*
* @param str
* @return md5 string
*/
public String hashString(String str) {
byte[] bt = hash(str);
return bytes2string(bt);
}

/**
* 對位元組流進行md5 string
*
* @param str
* @return md5 string
*/
public String hashBytes(byte[] str) {
byte[] bt = hash(str);
return bytes2string(bt);
}

/**
* 將一個位元組數組轉化為可見的字元串
*
* @param bt
* @return
*/
public String bytes2string(byte[] bt) {
int l = bt.length;

char[] out = new char[l << 1];

for (int i = 0, j = 0; i < l; i++) {
out[j++] = digits[(0xF0 & bt[i]) >>> 4];
out[j++] = digits[0x0F & bt[i]];
}

return new String(out);
}

/**
* 將字元串轉換為bytes
*
* @param str
* @return byte[]
*/
public byte[] string2bytes(String str) {
if (null == str) {
throw new NullPointerException("參數不能為空");
}
if (str.length() != 32) {
throw new IllegalArgumentException("字元串長度必須是32");
}
byte[] data = new byte[16];
char[] chs = str.toCharArray();
for (int i = 0; i < 16; ++i) {
int h = rDigits.get(chs[i * 2]).intValue();
int l = rDigits.get(chs[i * 2 + 1]).intValue();
data[i] = (byte) ((h & 0x0F) << 4 | (l & 0x0F));
}
return data;
}

/**
* 實現不重復的時間
*
* @author dogun
*/
private static class UniqTimer {
private AtomicLong lastTime = new AtomicLong(System.currentTimeMillis());

public long getCurrentTime() {
return this.lastTime.incrementAndGet();
}
}
}

❸ java uuid 和guid 的區別

全局唯一標識符(GUID)是一種演算法生成的二進制長度為128位的數字標識符。它常用於擁有多個節點、多台計算機的網路或系統中,以確保在理想情況下,任何計算機和計算機集群都不會生成兩個相同的GUID。GUID的總數達到了2^128(3.4×10^38)個,因此隨機生成兩個相同GUID的可能性非常小,但並不為0。為了減少這種重復的風險,用於生成GUID的演算法通常都會加入非隨機的參數,比如時間戳。

GUID這個詞有時也專指微軟對UUID標準的實現。UUID是由一組32位數的16進制數字組成的,理論上總數為16^32=2^128,約等於3.4 x 10^38。這意味著,即使每納秒產生1兆個UUID,也需要大約100億年才能用完所有的UUID。因此,GUID的唯一性非常高。

Java中的UUID與GUID相似,也是一種演算法生成的128位數字標識符。Java的UUID類提供了多種方法來生成UUID,比如使用隨機數生成器、基於時間戳等。與GUID一樣,UUID的生成也依賴於非隨機參數,以確保生成的UUID具有高度的唯一性。

在Java中,UUID可以用於各種場景,比如分布式系統中為對象分配全局唯一標識,或者在網路通信中作為消息標識符。通過使用非隨機參數,Java UUID能夠避免重復生成的問題,從而確保了其唯一性。

總結而言,Java UUID和GUID雖然都用於生成全局唯一標識符,但在實現細節上存在一些差異。GUID通常指微軟實現的UUID標准,而Java UUID則是在Java平台上實現的UUID,兩者都依賴於演算法和非隨機參數來確保唯一性。

❹ javaweb系統在高並發下如何實現訂單號生成唯一

在高並發場景下實現訂單號生成的唯一性,關鍵在於優化設計與負載平衡。簡單來說,不要在內存中生成鎖定,因為這不符合實際的業務場景。

通常,訂單號在需要時生成會導致延遲,因此需要在業務邏輯前進行前置處理。基於業務場景,訂單號不必嚴格按照系統進入時間排序,尤其在高並發環境下,毫秒級的差異通常不是問題。關鍵在於,你需要預先生成大量流水號並進行分片存儲,以減輕單點壓力。

首先,建立一個高性能隊列用於生成流水號,以確保高效率。之後,按照業務量將數據分片,便於負載均衡。同時,採用分級緩存策略,一級緩存在內存中存儲大約10秒的流水號,每個分片通過演算法決定在不同片段中獲取,以減少等待時間。如輪詢或計數方法,具體取決於業務場景。

二級緩存則存儲於高性能SSD中,每5秒檢查是否接近緩存臨界值(如剩餘15%),在必要時進行補充。這種設計不僅支持軟硬體一體優化,還便於橫向擴展,滿足不同業務場景需求。

總之,實現高並發下單號生成的唯一性,需要綜合運用隊列、分片、緩存等技術,同時優化架構設計,確保系統在高負載下仍能穩定運行。關鍵在於平衡性能與效率,以及適應不斷變化的業務需求。實際操作時,應根據具體場景進行測試與調整,以達到最佳效果。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:582
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:684
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1013
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:114
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:713