有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我开始使用两个线程,一个用于奇数,另一个用于偶数,但运行结果是“请输入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();
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    这是你需要做的事情的概貌

    首先,修改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
        }