JAVA使用多线程模拟员工宿舍分配流程,具体要求如下:
(1) 定义“Employee”类,包括两个成员变量:“id”和“dormId”。成员变量“id”唯一标识“Employee”类的对象,并且在分配宿舍时分配成员变量“dormId”;
(2) 生成80个“Employee”类实例并将其存储在HashSet中。
容器只需要存储Employee类型,不能存储id相同的Employee类的实例(提示:需要重写hashCode()和equals()方法);
(3) 使用4个线程将这些员工实例随机分配到4个宿舍楼。每个宿舍楼有20名员工,并根据他们在宿舍楼中的分配顺序分配dormId,例如:0306,表示宿舍楼3的6号房间。同时,“id”和“dormId”作为结果保存在文件“employee.txt”中
用了三个宿舍,还是有一定瑕疵,但是写文件,互斥基本解决了 (主要针对第三问)
package pt;
import java.awt.print.Printable;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.Box.Filler;
public class practice implements Runnable{
private int num = 0;
@Override
public void run() {
for(int i=0; i<40; i++){
live();
}
}
public void live(){
try {
File file = new File("employ.text");
if(!file.exists()) {
file.createNewFile();
}
FileWriter fileWriter = new FileWriter(file.getName(),true);
try {
Thread.sleep(300); //休息300毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
if(this.num<=80){
//打印买票信息
System.out.println(Thread.currentThread().getName() + "入住id: " + this.num++);
fileWriter.write(Thread.currentThread().getName() + "入住id: " + this.num++);
fileWriter.close();
}
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
public static void main(String[] args) {
practice ticketThread = new practice();
new Thread(ticketThread,"宿舍1").start(); //线程一
new Thread(ticketThread,"宿舍2").start(); //线程一
new Thread(ticketThread,"宿舍3").start(); //线程一
}
}