我看过很多类似的线程问题非常有用,但我不明白如何应用这个问题的答案。
我尝试创建两个线程来完成两个不同的任务,相反,我创建了两个执行相同操作的线程。
预期产出:
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();
}
}
答案 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: ");