一次生成四个随机号码,12位,可以字母和数字的组合,不能有规律,一年内不能重复。要考虑并发。有没有不去对比以前的,生成后就保证不重复。
public class RandomUuid
{
public static void main(String []args)
{
String uuid = java.util.UUID.randomUUID().toString();
String s = uuid.toString().replaceAll("-", "").substring(0, 12);
System.out.println(uuid);
System.out.println(s);
}
}
输出:3e11650d-a030-4eb4-bda0-94be301839a4
3e11650da030
考虑并发就把生成编号的类设计成单例模式,然后加锁便可
package littlejava;
public class RandomUuid
{
private static RandomUuid ruuid = new RandomUuid();
private RandomUuid()
{
}
public static RandomUuid getRandomUuidInstance()
{
return ruuid;
}
public synchronized String getUUID12()//如果不同步,多线程刹那间有可能获取到同一个uuid(已经试过)
{
return java.util.UUID.randomUUID().toString().replaceAll("-", "").substring(0, 12);
}
}
public class MyTask implements Runnable{
@Override
public void run() {
String temp;
for(int i=0;i<100;i++)
{
RandomUuid ru= RandomUuid.getRandomUuidInstance();
temp=ru.getUUID12();
System.out.println(temp);
}
}
}
public class UuidMain {
public static void main(String [] args)
{
MyTask mytask= new MyTask();
Thread t1 = new Thread(mytask);
Thread t2 = new Thread(mytask);
Thread t3 = new Thread(mytask);
Thread t4 = new Thread(mytask);
Thread t5 = new Thread(mytask);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
输出:45d5a53d3d39
313cdca23032
a066ae1e5121
821bfa0926de
2daa8e159355
a71aac3cd10d
9087da9d940c
edc1d61eca33
53d8de5f8805
edb0e536236a
b09d2b27468c
72a0d88d9d8a
de09701f527a
3bf8bfebca07
f23957c45591