• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
乐碎碎
程序媛想的事儿
博客园    首页    新随笔    联系   管理    订阅  订阅
笔试面试题 整理---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相关的地方做添加或删除操作。在迭代时只可以用迭代器进行添加删除! 
详见(集合迭代时对集合进行修改抛ConcurrentModificationException原因的深究以及解决方案)

13.
posted on 2014-03-18 12:57  xingle0917  阅读(167)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3