笔试面试题 整理---2

11.启动一个线程是用 run() 还是 start()?
run() :如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法;否则,该方法不执行任何操作并返回。
start() :使该线程开始执行;Java 虚拟机调用该线程的 run 方法。

答一: 启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

答二:之所以出现线程,就是为了更好的利用CPU,让她更加精明的干活。通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的,这里方法run()称为线程体, 它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止, CPU再运行其它线程, 如果直接用Run方法, 这只是调用一个方法而已, 程序中依然只有主线程--这一个线程, 其程序执行路径还是只有一条, 这样就没有达到写线程的目的。 

12.下面代码抛什么异常?
List<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
for(String s : list){
if(s.equals("A")){
list.add("E");
}
}
----
ConcurrentModificationException异常
for(String s : list) 这句话实际上是用到了集合的iterator() 方法
用iterator遍历集合时要注意的地方:不可以对iterator相关的地方做添加或删除操作。在迭代时只可以用迭代器进行添加删除! 

13.
原文地址:https://www.cnblogs.com/xingele0917/p/3607407.html