主键生成器

package com.appdev.bsf.fusioncharts.client;

 

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.util.Date;

 

/**

 * 主键生成器。该类使用单例模式。

 * 

 */

public class PKGenerator {

/**

* �存储主机IP左移48位后的值。ֵ��

*/

private long key;

 

private static final PKGenerator instance = new PKGenerator();

 

/**

* 获得当前主机IP的后3位(如192.168.0.112中的112),左移48位后存入变量lastTransIP中������ l

* @roseuid 3EF6A8F0023D

*/

private PKGenerator() {

try {

InetAddress ia = InetAddress.getLocalHost();

String strIP = ia.getHostAddress();

int lastPoint = strIP.lastIndexOf(".");

int longip = Integer.parseInt(strIP.substring(lastPoint + 1));

makeKey(longip);

} catch (UnknownHostException e) {

System.out.println("No Host");

}

}

 

/**

* 生成key

* @param seed

*/

private synchronized void makeKey(int seed) {

long lastTransIP = ((long) seed) << 48;

Date date = new Date();

long longTime = date.getTime();

key = longTime | lastTransIP;

}

 

/**

* @return com.adtech.util.PKGenerator

* @roseuid 3EF6A8F00251

*/

public static PKGenerator getInstance() {

return instance;

}

 

/**

* 返回唯一的键。获得当前时间的毫秒数位与lastTransIP的值。ֵ��

* @return long

* @roseuid 3EF6A8F00265

*/

private synchronized long getKey() {

return ++key;

}

 

public long generateKey() {

return instance.getKey();

}

}


你可能感兴趣的:(java,util)