Java: 如何使用线程和用户输入显示奇数和偶数

Java: How to show odd and even number by using thread and user's input

我开始使用 2 个线程,一个用于奇数,另一个用于偶数,但是 运行 结果我得到两倍的“请输入 x”。 我的问题,如何只显示一次“请输入 x”并仍然使用两个线程?

@Override
public void run() {
    System.out.println("Please input x:");
    x= input.nextInt();
    System.out.println("Please input y:");
    y=input.nextInt();

    while (x< y) {
        synchronized (lock) {
            while (x % 2 != remainder) { // wait for numbers other than remainder
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(Thread.currentThread().getName() + " " + x);
            x++;
            lock.notifyAll();
        }
    }
}

这是您需要做的事情的大致情况。

首先,修改TaskEvenOdd,以便可以将xy值传递给其构造函数并将它们存储在实例变量中:

public class TaskEvenOdd implements Runnable {
    private int remainder;
    private int x;
    private int y;
  
    public TaskEvenOdd(int remainder, int x, int y){
        this.remainder = remainder;
        this.x = x;
        this.y = y;
    }

    @Override
    public void run() {

    while (x < y) {
        /// etc...
    }
}

在 main 中,提示输入 xy 值,并将它们作为参数传递给 OddEvenTask 构造函数:

    public static void main(String[] args){
        System.out.println("Enter x:");
        int x = input.nextInt();
        System.out.println("Enter y:");
        int y = input.nextInt();
        OddEvenTask oddTask = new OddEvenTask(1, x, y);
        OddEvenTask evenTask = new OddEvenTask(0, x, y);
        // Now create and start your threads
    }