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办法令其进入就绪