每当用户输入扫描仪Java时生成序列号

问题描述

我目前是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