写在前面:
大量用户同时下单时,如何控制同一用户重复下单?
package com.fulh.thread; public class LockId { public static void main(String[] args) { //模拟不同操作员同时操作的场景 /*for(int i=0;i<100;i++){ new Thread(new Person(String.valueOf(i)),String.valueOf(i)).start();; }*/ //模拟统一操作员短时间内多次操作的场景 for(int i=0;i<100;i++){ new Thread(new Person("1"),String.valueOf(i)).start(); } } } /** * @ClassName: LockId.java * @Description: 模拟操作员信息 * * @version: v1.0.0 * @author: fulh * @date: 2017年3月24日 下午5:47:08 * * Modification History: * Date Author Version Description *------------------------------------------------------------ * 2017年3月24日 fulh v1.1.0 修改原因 */ class Person implements Runnable { private String id; public Person(){} public Person(String id){ this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } @Override public void run() { //对操作员id加锁(当然也可以对其他操作员唯一标识进行加锁) synchronized (id) { try { System.out.println(Thread.currentThread().getName() + " 线程休眠了..."); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + " 线程走完了...,当前时间:" + System.currentTimeMillis()); } catch (InterruptedException e) { e.printStackTrace(); } } } }
结果如下:①模拟同一操作员多次操作的情景:线程会出现等待
0 线程休眠了... 0 线程走完了...,当前时间:1490349092102 99 线程休眠了... 99 线程走完了...,当前时间:1490349094103 97 线程休眠了... 97 线程走完了...,当前时间:1490349096104 98 线程休眠了... 98 线程走完了...,当前时间:1490349098104 96 线程休眠了... 96 线程走完了...,当前时间:1490349100105 95 线程休眠了... 95 线程走完了...,当前时间:1490349102105 94 线程休眠了... 94 线程走完了...,当前时间:1490349104107 93 线程休眠了... 93 线程走完了...,当前时间:1490349106107 92 线程休眠了... 92 线程走完了...,当前时间:1490349108107 91 线程休眠了...
②模拟不同操作员同时操作的情景:线程不会等待
0 线程休眠了... 4 线程休眠了... 2 线程休眠了... 9 线程休眠了... 3 线程休眠了... 6 线程休眠了... 5 线程休眠了... 1 线程休眠了... 10 线程休眠了... 12 线程休眠了... 11 线程休眠了... 8 线程休眠了... 14 线程休眠了... 7 线程休眠了...
时间: 2024-10-09 12:42:44