日期:2014-05-20  浏览次数:20638 次

main函数运行问题
public static void main(String[] args) {
MyRunnable runnable = new MyRunnable();
Thread thread0 = new Thread(runnable);
thread0.start();



Thread thread = Thread.currentThread();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
              System.out.println(thread.getName());
这段代码为何先输出Thread0,过五秒后输出main。如果是main睡5秒,那么应该五秒后才有输出啊(把thread0的语句放在try catch后面就是这样)。还有,为啥一行输出语句会输出两次?难道会获取两次当前线程,每次都打印?java新手,大家不要见笑。
代码运行

------解决方案--------------------
下次把代码贴全
首先,什么是多线程,多线程自然是有很多线程在调度执行,主线程sleep(5000),在这之前,thread0已经就绪或已执行,自然会执行MyRunnable 的run方法,如果你把thread0放在后面,那肯定是等到主线程先sleep(5000)之后才开始执行run方法
为什么打印两次,首先主线程在sleep(5000)之后,会打印输出,如果你的run方法中有打印语句,那当然会在这之前打印了。如果thread0在主线程sleep(5000)之后执行,那么肯定是先打印main其次是thread0
------解决方案--------------------
你打印语句没写吧。
thread0.start执行到这里,已经通知系统thread0可以启动了。所以你看到thread0
而main thread睡了5秒后打印main
------解决方案--------------------
楼主这个多线程,有main线程和thread0线程。
Thread.sleep(5000);主线程睡着了,要睡5秒,而此时thread0.start();子线程已经开始了,当然就先输出thread0,过五秒后再输出主线程main。
把thread0的语句放在try catch后面,那么main还没睡醒,而thread0子线程要等main睡醒后才启动,当然是5秒后全部输出。