Java面试问题之三十五_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java面试问题之三十五

Java面试问题之三十五

 2011/9/19 21:00:00  YuHuang.Neil  http://yuhuang-neil.iteye.com  我要评论(0)
  • 摘要:分析以下Java代码段,给出程序运行的结果并简要说明join()方法的用途。importjava.lang.Thread;publicclassMachineJoinextendsThread{publicvoidrun(){for(inta=0;a<5;a++){System.out.println(getName()+":"+a);}}publicstaticvoidmain(String[]args)throwsException
  • 标签:面试 Java面试 Java 问题 面试问题
分析以下Java代码段,给出程序运行的结果并简要说明join()方法的用途。

import java.lang.Thread;


public class MachineJoin extends Thread {
        public void run() {
                for(int a=0;a<5;a++) {
                        System.out.println(getName()+ " : "+a);
                }
        }

        public static void main(String[] args) throws Exception {
                MachineJoin machine = new MachineJoin();
                machine.setName("m1");

                machine.start();
                System.out.println("main:join machine");
                machine.join();
                System.out.println("main:end");

        }
}



问题分析:当前运行的线程可以调用另外一个线程的join()方法,当前运行的线程将转到阻塞状态,直到另一个线程运行结束,它才会恢复运行(从阻塞状态转换到就绪状态)。上述代码的意图非常明显,main主线程调用了machine线程的join()方法,则主线程就会进入阻塞状态直至machine线程运行结束才会恢复到就绪状态等待继续执行的机会。因此,运行结果应该是:
main:join machine
m1 : 0
m1 : 1
m1 : 2
m1 : 3
m1 : 4
main:end


知识扩展:
join()方法有两种重载形式,分别为:
public void join()
public void join(long timeout)
以上timeout参数设定当前线程被阻塞的时间,以毫秒为单位。上述代码中的main()方法中的“machine.join()”改为“machine.join(10)”,则当前线程被阻塞的时间超过了10毫秒,或者machine线程运行结束时,主线程就会恢复运行。





发表评论
用户名: 匿名