当前位置:首页 » 编程语言 » 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%),在必要时进行补充。这种设计不仅支持软硬件一体优化,还便于横向扩展,满足不同业务场景需求。

总之,实现高并发下单号生成的唯一性,需要综合运用队列、分片、缓存等技术,同时优化架构设计,确保系统在高负载下仍能稳定运行。关键在于平衡性能与效率,以及适应不断变化的业务需求。实际操作时,应根据具体场景进行测试与调整,以达到最佳效果。

热点内容
实体购物商店选用什么服务器 发布:2025-06-14 10:17:09 浏览:632
在Linux中的cd 发布:2025-06-14 10:11:20 浏览:436
搭建dmr服务器 发布:2025-06-14 10:11:14 浏览:668
仅编译 发布:2025-06-14 10:01:21 浏览:776
dos下载ftp文件命令 发布:2025-06-14 09:55:18 浏览:199
阿里云服务器和应用 发布:2025-06-14 09:54:38 浏览:384
php弹窗跳转 发布:2025-06-14 09:42:03 浏览:528
重生的密码是什么 发布:2025-06-14 09:31:02 浏览:547
安卓手机什么品牌的最好 发布:2025-06-14 09:13:16 浏览:606
房价算法 发布:2025-06-14 08:59:42 浏览:316