如何实现runnable总是交织结果?

时间:2014-06-29 18:52:16

标签: java multithreading runnable

关掉线程的最后一个问题, Why my input is showing one thread executing after another thread, not at the same time?, 我收到的回答是“在多线程的情况下,不能保证哪个线程被分配给处理器运行的时间,在这种情况下,结果是不可预测的,并且每次运行都会产生不同的输出。”

然而,当我测试结果是不可预测的另一种制作线程(实现Runnable)的想法时,结果总是交织在一起并且相同。与扩展Thread相比,任何人都能解释这种一致性吗 实现Runnable的代码

class Runner implements Runnable{
    @Override
    public void run() {
        // TODO Auto-generated method stub
        for(int i =0; i< 10; i++){
            System.out.println("Hello " + i);
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }

}
public class App {
    public static void main(String[] args){

        Thread t1 = new Thread(new Runner());
        Thread t2 = new Thread(new Runner());
        t1.start();
        t2.start();
    }
}

输出(一致):http://imgur.com/rhDVUhD

1 个答案:

答案 0 :(得分:2)

正如多位评论者已经指出的那样,很可能交织在您的代码中确实已经发生了。我在我的工作站上测试了它,并且线程执行的顺序是不可预测的。

screenshot

根据您的用户名,我建议您参加Coursera课程"Programming Mobile Services for Android Handheld Systems"

它包含多个关于多线程的模式和示例。比如这个错误实现的乒乓应用程序,它产生你所追求的效果:PingPongWrong.java