我想创建两个threads.One线程必须打印奇数,另一个线程必须打印1-20个数字之间的偶数。 这是我到目前为止尝试的代码,但它没有给出预期的输出。
public class JavaApplication40 extends Thread {
@Override
public void run(){
while (true){
for (int i=0;i<=20;i++){
if(i%2!=0){
System.out.println("odd " +i);
}
}
}
}
public static void main(String[] args) {
Thread t =new JavaApplication40();
for (int x=0;x<=20;x++){
if(x%2==0){
System.out.println("even " + x);
}
}
}
}
此代码只输出偶数。我也想要奇数。有人请告诉我如何修改上面的代码以获得预期的输出。
答案 0 :(得分:3)
创建Thread
后,您需要致电start()
启动它。尝试拨打
t.start();
此外,您应该扩展Thread
。相反,你应该实现Runnable并用Thread包装它。此外,您不需要检查值是否为奇数,或者即使您确定该值始终为奇数或偶数。
public class JavaApplication40 {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
public void run() {
// starting at 1 and counting by 2 is always odd
for (int i = 1; i < 10000; i += 2)
System.out.println("odd " + i);
}
});
t.start();
// starting at 0 and counting by 2 is always even
for (int x = 0; x < 10000; x+=2)
System.out.println("even " + x);
}
}
注意:使用Threads的重点是独立执行,Threads需要时间才能启动。这意味着你可以将所有偶数和所有奇数一起得到。也就是说它打印的速度比线程开始的速度快。
您可能需要打印更多数字才能看到它们同时打印。例如10_000
代替20。
答案 1 :(得分:1)
您创建了自己的主题,但从未启动它。
Thread t =new JavaApplication40();
创建它,启动时会调用run()
以t.start()
答案 2 :(得分:1)
ExecutorService es=Executors.newFixedThreadPool(2);
es.submit(t);
for ....
es.shutdown(); // .shutdownNow() for infinite looped threads