关掉线程的最后一个问题, 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
答案 0 :(得分:2)
正如多位评论者已经指出的那样,很可能交织在您的代码中确实已经发生了。我在我的工作站上测试了它,并且线程执行的顺序是不可预测的。
根据您的用户名,我建议您参加Coursera课程"Programming Mobile Services for Android Handheld Systems"。
它包含多个关于多线程的模式和示例。比如这个错误实现的乒乓应用程序,它产生你所追求的效果:PingPongWrong.java