问题描述
我目前是Java的新手,我想弄清楚每当用户输入扫描仪时如何生成序列号。目前,我一直在为它们的数字生成器使用atomicint和atomiclong之间感到困惑。但是,我的观点是,只要用户输入了类(Id,name,email,phone..etc)中的所有必要数据,它将在控制台开始时自动将该用户分配为Guest_01。 (例如Guest_01:s4842(ID),Jason Schlong(name),JasonSC234 @ gmail.com(email)) 有没有一种特定的方法来说明上面的输出? (请记住,在将序列号放入扫描仪之前,我需要先生成序列号(听起来很蠢,但这就是我的做法)
public class Main {
private static final int TOTAL_NUMBER_IN_SEQUENCE =20;
private static final int TOTAL_NUMBER_IN_THREAD =50;
public static void main(String[] args) {
Lead lead = new Lead(TOTAL_NUMBER_IN_THREAD,TOTAL_NUMBER_IN_SEQUENCE);
Thread t1 = new Thread(new SequenceGenerator(lead,1),"Lead_");
Thread t2 = new Thread(new SequenceGenerator(lead,3),"Lead_");
Thread t3 = new Thread(new SequenceGenerator(lead,2),"Lead_");
t1.start();
t2.start();
t3.start();
}
public class SequenceGenerator implements Runnable{
public Lead lead;
public int result;
public SequenceGenerator(Lead lead,int result) {
super();
this.lead = lead;
this.result = result;
}
public void run(){
lead.printNumber(result);
}
}
public class Lead {
private int number = 1;
private int NumberofThread;
private int totalNumbersequence;
public Lead(int numberofThread,int totalNumbersequence) {
super();
NumberofThread = numberofThread;
this.totalNumbersequence = totalNumbersequence;
}
public void printNumber(int resutl){
synchronized (this){
while(number < totalNumbersequence-1){
while (number % NumberofThread!= resutl){
try {
wait();
}catch (InterruptedException e){
e.printstacktrace();
}
}
System.out.println(Thread.currentThread().getName()+" "+number++);
notify();
}
}
}
}
解决方法
您不需要这种多线程方法。您可以只维护一个整数,每次创建来宾时,只需增加它即可。
static final class Guest {
private final int sequenceId;
private final String id;
private final String name;
private final String email;
Guest(int sequenceId,String id,String name,String email) {
this.sequenceId = sequenceId;
this.id = id;
this.name = name;
this.email = email;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
public int getSequenceId() {
return sequenceId;
}
@Override
public String toString() {
return String.format("Guest_%s: %s,%s,%s",sequenceId,id,name,email);
}
}
private Guest createGuest(int sequence) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter id:");
String id = scanner.nextLine();
System.out.println("Enter name:");
String name = scanner.nextLine();
System.out.println("Enter email:");
String email = scanner.nextLine();
return new Guest(sequence,email);
}
public static void main(String[] args) {
GuestGenerator generator = new GuestGenerator();
int sequence = 0;
while (sequence < 2) {
Guest guest = generator.createGuest(sequence++);
System.out.println(guest);
}
}
Guest_0: 0,jason0,email0
Guest_1: 0,jason1,email1