Java受注番号生成ツール(実装一)オブジェクトロックベース

1968 ワード

Javaで実装された受注番号生成ツールは、ミリ秒ごとに生成される受注の最大値を設定する非重複受注番号を生成します.
オブジェクトロックが使用されました.
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @ClassName: MakeOrderNum
 * @CreateTime 2015 9 13    4:51:02
 * @author : mayi
 * @Description:        ,        ,    1  1000 ,   
 *
 */
public class MakeOrderNum {
	/**
	 *    ,       
	 */
	private static Object lockObj = "lockerOrder";
	/**
	 *         
	 */
	private static long orderNumCount = 0L;
	/**
	 *              
	 */
	private int maxPerMSECSize=1000;
	/**
	 *         ,    1  1000 ,   
	 * @param tname    
	 */
	public void makeOrderNum(String tname) {
		try {
			//         
			String finOrderNum = "";
			synchronized (lockObj) {
				//                   ,     
				long nowLong = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
				//          ,     ,  1      1000 ,1 100 
				if (orderNumCount > maxPerMSECSize) {
					orderNumCount = 0L;
				}
				//     
                String countStr=maxPerMSECSize +orderNumCount+"";
                finOderNum=nowLong+countStr.substring(1);
				orderNumCount++;
				System.out.println(finOrderNum + "--" + Thread.currentThread().getName() + "::" + tname );
				// Thread.sleep(1000);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		//               
		try {
			for (int i = 0; i < 200; i++) {
				Thread t1 = new Thread(new Runnable() {
					public void run() {
						MakeOrderNum makeOrder = new MakeOrderNum();
						makeOrder.makeOrderNum("a");
					}
				}, "at" + i);
				t1.start();

				Thread t2 = new Thread(new Runnable() {
					public void run() {
						MakeOrderNum makeOrder = new MakeOrderNum();
						makeOrder.makeOrderNum("b");
					}
				}, "bt" + i);
				t2.start();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}