乐趣区

关于java:java面试题难点总结02

21-1-11

如何实现数组和 List 之间的转换?

  • List 转换成为数组:调用 ArrayList 的 toArray 办法。
  • 数组转换成为 List:调用 Arrays 的 asList 办法。

Array 和 ArrayList 有何区别?

  • Array 能够包容根本类型和对象,而 ArrayList 只能包容对象。
  • Array 是指定大小的,而 ArrayList 大小是固定的。
  • Array 没有提供 ArrayList 那么多功能,比方 addAll、removeAll 和 iterator 等。

并行和并发有什么区别?

  • 并行是指两个或者多个事件在同一时刻产生;而并发是指两个或多个事件在同一时间距离产生。
  • 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
  • 在一台处理器上“同时”解决多个工作,在多台处理器上同时解决多个工作。如 hadoop 分布式集群。

创立线程有哪几种形式?

①. 继承 Thread 类创立线程类

  • 定义 Thread 类的子类,并重写该类的 run 办法,该 run 办法的办法体就代表了线程要实现的工作。因而把 run()办法称为执行体。
  • 创立 Thread 子类的实例,即创立了线程对象。
  • 调用线程对象的 start()办法来启动该线程。

②. 通过 Runnable 接口创立线程类

  • 定义 runnable 接口的实现类,并重写该接口的 run()办法,该 run()办法的办法体同样是该线程的线程执行体。
  • 创立 Runnable 实现类的实例,并依此实例作为 Thread 的 target 来创立 Thread 对象,该 Thread 对象才是真正的线程对象。
  • 调用线程对象的 start()办法来启动该线程。

③. 通过 Callable 和 Future 创立线程

  • 创立 Callable 接口的实现类,并实现 call()办法,该 call()办法将作为线程执行体,并且有返回值。
  • 创立 Callable 实现类的实例,应用 FutureTask 类来包装 Callable 对象,该 FutureTask 对象封装了该 Callable 对象的 call()办法的返回值。
  • 应用 FutureTask 对象作为 Thread 对象的 target 创立并启动新线程。
  • 调用 FutureTask 对象的 get()办法来取得子线程执行完结后的返回值。

线程有哪些状态?

线程通常都有五种状态,创立、就绪、运行、阻塞和死亡。

  • 创立状态。在生成线程对象,并没有调用该对象的 start 办法,这是线程处于创立状态。
  • 就绪状态。当调用了线程对象的 start 办法之后,该线程就进入了就绪状态,然而此时线程调度程序还没有把该线程设置为以后线程,此时处于就绪状态。在线程运行之后,从期待或者睡眠中回来之后,也会处于就绪状态。
  • 运行状态。线程调度程序将处于就绪状态的线程设置为以后线程,此时线程就进入了运行状态,开始运行 run 函数当中的代码。
  • 阻塞状态。线程正在运行的时候,被暂停,通常是为了期待某个工夫的产生 (比如说某项资源就绪) 之后再持续运行。sleep,suspend,wait 等办法都能够导致线程阻塞。
  • 死亡状态。如果一个线程的 run 办法执行完结或者调用 stop 办法后,该线程就会死亡。对于曾经死亡的线程,无奈再应用 start 办法令其进入就绪
退出移动版