如何使用线程执行从1-10打印数字的两个不同任务

时间:2018-04-12 13:24:21

标签: java multithreading

我看过很多类似的线程问题非常有用,但我不明白如何应用这个问题的答案。

我尝试创建两个线程来完成两个不同的任务,相反,我创建了两个执行相同操作的线程。

预期产出:

1 2 3 4 5 6 7 8 9 10

当前输出:

1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 

代码:

package midtermpractice;

public class PrintNums {

    public static class PrintRunnable implements Runnable {

        int num;

        public PrintRunnable(int x) {
            this.num = x;

        }

        synchronized public void run() {
            for (int i = this.num; i < 10; i++) {

                System.out.print(i + " ");

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    System.err.println(e);
                }
            }

        }
    }

    public static void main(String[] args) {
        Thread evenThread = new Thread(new PrintRunnable(1), "Even: ");
        Thread oddThread = new Thread(new PrintRunnable(2), "Odd: ");

        evenThread.start();
        oddThread.start();
    }

}

1 个答案:

答案 0 :(得分:1)

为了将列表从0输出到9,您需要更改一些代码。首先,您需要了解的是:

  

奇数+ 2 =奇数

     

偶数+ 2 =偶数

我知道你想要一个线程打印奇数而其他打印偶数。话虽如此,您需要在几行中更改代码。

for (int i = this.num; i <= 10; i+=2) {...}

Thread evenThread = new Thread(new PrintRunnable(0), "Even: ");
Thread oddThread = new Thread(new PrintRunnable(1), "Odd: ");