public class test_2 { public static void main(String[] args){
ThreadDemo t = new ThreadDemo(); Thread thread=new Thread(t); thread.start(); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("main thread is over");
}
public static class ThreadDemo extends Thread{ @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("This is a Thread test"+i); } } } }没什么好迷惑的,你启动了一个线程,程序自己main方法执行会启动一个自己的线程(主线程) for循环的效率何等快,基本没有被捣乱的机会,代码如上,你让主线程睡一觉,就可以看出来了。如果还不清楚,就让你启动的线程每循环一次也睡一小会。
嗯,你们说的我知道,我就是开始 ,运行几十次了都是先输出 main thread is over ,而不是run方法中的 ,以为 有问题来 (怎么说也要输出次不一样的阿). 但是我现在又 试出来了. 谢谢亲 们哈
线程start调用以后 是相当于一个预备的状态 什么时候启动要系统管理线程的东西说了算 谁说了也不算!所以 说不准会出什么情况的 你每次运行的结果都是不确定的 输出语句 和run中的输出 说不定谁先执行
当然run中的顺序是定的 就是这个over的输出 说不定会插到哪个位置
public static void main(String[] args){
ThreadDemo t = new ThreadDemo();
Thread thread=new Thread(t);
thread.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("main thread is over");
}
public static class ThreadDemo extends Thread{
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("This is a Thread test"+i);
}
}
}
}没什么好迷惑的,你启动了一个线程,程序自己main方法执行会启动一个自己的线程(主线程) for循环的效率何等快,基本没有被捣乱的机会,代码如上,你让主线程睡一觉,就可以看出来了。如果还不清楚,就让你启动的线程每循环一次也睡一小会。
此时有2个线程,main和该线程,那么其实应当是两者竞争cpu
所以此时输出顺序不能确定~但是貌似有一定的机制保证当前线程更容易抢占到cpu吧