オンラインショッピングをシミュレートするJavaプログラムを作成します。ユーザーがアイテムを選択して注文を送信すると、注文ごとに一意の注文番号が自動的に生成されます。

この章を見る

ジョブディレクトリを表示する


ニーズの声明:

オンラインショッピングをシミュレートし、ユーザーがアイテムを選択して注文を送信すると、各注文は自動的に一意の注文番号を生成します。一部のeコマースWebサイトでは、データのピーク時に1ミリ秒で1,000件近くの注文を処理する必要がある場合があります。

ここで、5つの注文が同時に送信され、一意の注文番号が生成されるシナリオを単純にシミュレートします。注文番号生成ルールは、ミリ秒単位の現在の時刻+注文番号です。

たとえば、現在の時刻のミリ秒数が150000の場合、1次の数は1500001であり、9次の数は1500009です。

実現のアイデア:

プロジェクトに注文クラスOrderを作成します(注文番号、注文金額、注文ユーザー)

注文処理クラスProcessOrderを作成してRunnableインターフェイスを実装し、注文タイプのメンバー変数と整数静的カウントを注文番号(初期1)として定義し、注文番号を生成するメソッドを追加します

注文番号を生成する方法では、スリープを使用して500ミリ秒を遅延させると同時に、同期コードブロックを追加し、静的変数カウントを同期モニターとして指定し、システム時間ミリ秒と同期コードブロック内の注文番号を使用して注文番号操作を生成します。

同期コードブロックの外側で、注文ユーザー、注文金額、注文番号を印刷します

テスト起動クラスTestOrderを作成します。このクラスのmain()メソッドで、パラメーター化されたコンストラクターを使用して、5つのOrderオブジェクトをインスタンス化します。ProcessOrder(Order order)構築メソッドを使用して、ProcessOrderクラスの5つのオブジェクトをインスタンス化し、5つのOrderオブジェクトを構築メソッドのパラメーターorderに順番に渡します。それぞれ5つのスレッドオブジェクトを作成し、5つのProcessOrdersを渡してテストを開始します

実装コード:

注文


public class Order {
	//订单编号
	private String orderNumber;
	//订单金额
	private double orderAmount;
	//用户名称
	private String username;
	//无参构造
	public Order() {
		super();
	}
	//有参构造
	public Order(String orderNumber, double orderAmount, String username) {
		super();
		this.orderNumber = orderNumber;
		this.orderAmount = orderAmount;
		this.username = username;
	}
	public String getOrderNumber() {
		return orderNumber;
	}
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	public double getOrderAmount() {
		return orderAmount;
	}
	public void setOrderAmount(double orderAmount) {
		this.orderAmount = orderAmount;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}

}

注文処理クラス(ProcessOrder)

 
public class ProcessOrder implements Runnable{
	private Order order;
	//订单计数器
	private static Integer count = 1;
 
	public ProcessOrder(Order order) {
		this.order = order;
	}
	
	@Override
	public void run() {
		generateOrderNumber();
	}
	
	public void generateOrderNumber() {
		try {
			//加入线程延迟
			Thread.sleep(500);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		//同步监听器是count变量
		synchronized (count) {
			//生成订单编号
			StringBuffer orderNumber = new StringBuffer("").append(System.currentTimeMillis()).append(count++);
			//将订单编号保存到订单对象中
			order.setOrderNumber(orderNumber.toString());
		}
		System.out.printf("%s的订单金额是%.2f元,订单编号是:%s\n",order.getUsername(),order.getOrderAmount(),order.getOrderNumber());
	}
	
}

クラスを開始して実行します(TestOrder)


public class TestOrder {
	public static void main(String[] args) {
		//实例化5个订单对象
		Order order1 = new Order(null,300,"张三");
		Order order2 = new Order(null,400,"李四");
		Order order3 = new Order(null,500,"王五");
		Order order4 = new Order(null,300,"赵六");
		Order order5 = new Order(null,200,"秦七");
		//实例化5个Runnable对象
		ProcessOrder processOrder1 = new ProcessOrder(order1);
		ProcessOrder processOrder2 = new ProcessOrder(order2);
		ProcessOrder processOrder3 = new ProcessOrder(order3);
		ProcessOrder processOrder4 = new ProcessOrder(order4);
		ProcessOrder processOrder5 = new ProcessOrder(order5);
		//实例化5条线程
		Thread thread1 = new Thread(processOrder1);
		Thread thread2 = new Thread(processOrder2);
		Thread thread3 = new Thread(processOrder3);
		Thread thread4 = new Thread(processOrder4);
		Thread thread5 = new Thread(processOrder5);
		//依次启动线程
		thread1.start();
		thread2.start();
		thread3.start();
		thread4.start();
		thread5.start();
	}
}

 

おすすめ

転載: blog.csdn.net/weixin_44893902/article/details/108815780