用Java创建两个线程

时间:2016-04-16 19:48:34

标签: java multithreading

我想创建两个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);   
            }
        }

    }

}

此代码只输出偶数。我也想要奇数。有人请告诉我如何修改上面的代码以获得预期的输出。

3 个答案:

答案 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