SCNU_Java作业_主题7:java 多线程程序设计 作业:多线程测试(第二题)

这是一个Java程序,模拟了一个服装店中顾客的购物过程,包括选衣服、试衣服和结账离开的环节。程序使用多线程实现,顾客按顺序进行活动,并通过线程休眠模拟不同环节所需的时间。程序输出每个顾客当前所处的环节及时间信息。顾客在选衣服和试衣服环节的时间是随机的,结账时间为固定5秒。整个过程以队列的形式管理顾客,确保试衣间的使用顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2、顾客进服装店的购物过程包含三个环节,选衣服,试衣服,结账离开。其中选衣服环节和试衣服环节需要的时间为 1-5秒不等(随机),结账离开环节5秒,该店只有一间试衣间(不能两人同时使用)。 请编写一个程序模拟每隔一段时间有一个个顾客进店购买的过程。程序执行过程中,输出每个顾客所处的环节信息。 比如,顾客1在试衣服,顾客2,在选衣服,顾客2在试衣服。 提示,用线程调度

学校的作业罢了
模仿前辈的
模仿模仿着,然后我也不知道怎么搞的,搞出另外一个版本的,跟题目不太一样,凑合着算了,神奇的竟然能运行了

先做一个随机数

package theme7_2;

import java.util.Random;

public class RandomUtil {//这个名字不能起为Random,不然会冲突报错,我刚刚就是
	private static Random r = new Random();
	
	/**
	 * 生成一个处于[low, high]的整数
 
	 */
	public static int getInt(int low, int high) // 10, 20   
	{ // high - low  10  0-9  10,19
		return  low + r.nextInt(high - low + 1); 
	}
}

做一个顾客

package theme7_2;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Queue;

public class Customer {
	private String num;//顾客编号
	private SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");//格式化时间
	
	public Customer(String num) {
		this.num = num;//Customer的类都要有这么一个返回私有成员的东西 
	}
	
	//顾客排队
	public void queueUp(Queue<Customer> queue)//排队格式,<>里面是排队的人
	{
		System.out.println(num + "开始排队 " + getTime());

		queue.offer(this);//输出顾客编号???
	}
	
	//顾客挑选衣服
	public void select() {
		System.out.println(num+"开始挑选衣服"+getTime());
		int cost = RandomUtil.getInt(1, 2)*1000;//选衣服花费时间1,2s;
		try {
			Thread.sleep(cost);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(num + "挑好衣服 " + getTime());
	}
	
	//顾客试穿衣服
	public void trying() {
		System.out.println(num+"开始试衣服"+getTime());
		int cost = RandomUtil.getInt(3, 4)*1000;//试穿衣服3,4s;
		try {
			Thread.sleep(cost);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(num+"试完衣服"+getTime());
	}
	
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}

	public SimpleDateFormat getSdf() {
		return sdf;
	}

	public void setSdf(SimpleDateFormat sdf) {
		this.sdf = sdf;
	}
	
	public String getTime() {
		return sdf.format(new Date());//统一格式日期
	}
		
	
}

做个顾客测试

package theme7_2;


import java.util.LinkedList;
import java.util.Queue;


public class Test {


	public static void main(String[] args) {
		MyThread1 t1 = new MyThread1();
		t1.start();
	
	}

}

class MyThread1 extends Thread{
	public static int count = 0;
	public static Queue<Customer> queue = new LinkedList<>();//新建一个顾客的队列
	
	
	public static void showQueue() {
		
		for(Customer cust : queue) {
			System.out.print(cust.getNum()+" ");//得到顾客编号
		}
		System.out.println("\n");
	}
	
	public void run() {
		while(true) {
			Customer cust = new Customer("顾客"+(++count));
			cust.select();//挑衣服
			cust.queueUp(queue);
			cust.trying();
			queue.poll();
			if (cust != null) {
				cust.trying();
				showQueue(); // 每次一个顾客从试衣间出来(下一个顾客还没进去),就打印一下队伍的情况
			}
			try {
				Thread.sleep(RandomUtil.getInt(1, 2)*1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	

}

反正我觉的很离谱,跟前辈的测试环节不太一样,我选择自己来模拟老师给的例子
结果就成这个鬼样子了,顾客一个一个排队来,一个结束再到另外一个
笑死我了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值