每日一讲(Java面试题解析)主讲人:孙荣俊多线程作为Java中很重要的一个知识点,在此还是有必要复习一下的。•线程的生命周期及五种基本状态yield()方法:调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。注意:调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。isAlive()方法方法isAlive()的功能是判断当前线程是否处于活动状态方法isAlive()的作用是测试线程是否偶处于活动状态。什么是活动状态呢?活动状态就是线程已经启动且尚未终止。线程处于正在运行或准备开始运行的状态,就认为线程是“存活”的。到目前位置,有了线程阻塞运行状态的3种方法:1、调用Thread.sleep():2、调用Thread.yield():3、调用join()方法除了以上三种方式外,还有几种特殊情况可能使线程离开运行状态:1、线程的run()方法完成。2、在对象上调用wait()方法(不是在线程上调用)。3、线程不能在对象上获得锁定,它正试图运行该对象的方法代码。4、线程调度程序可以决定将当前运行状态移动到可运行状态,以便让另一个线程获得运行机会,而不需要任何理由。publicclassTest{publicintaMethod(){staticinti=0;i++;returni;}publicstaticvoidmain(Stringargs[]){Testtest=newTest();test.aMethod();intj=test.aMethod();System.out.println(j);}}D(因为static修饰的变量代表全局的,在类加载的时候就会加载,如果放在非static方法里,又成局部的了,自然不对了;个人理解,放在非static方法里了,因为方法没有加载到,自然不会加载方法里的变量了,但是却用static修饰了,自然冲突了)输出结果是什么?A.0B.1C.2D.编译失败在一个线程中Sleep(1000)方法,将使得该线程在多少时间后获得对CPU的控制(假设睡眠过程中不会有其他事件唤醒该线程)A.正好1000毫秒B.1000毫秒不到C.=1000毫秒D.不一定•C(因为在1000ms之后,只是让线程重新回到队列中,如果还有其它线程在执行,还会继续等待,不会立即取得CPU的控制)在Java中,若在try-catch-finally的try语句块中插入return语句,finally语句块是否会执行?•会执行。当退出try语句块时,finally语句块将执行。即使我们试图从try语句块里跳出(通过return语句、continue语句、break语句或任意异常语句),finally语句块仍将得以执行。