1.什么是interface(接口)。
interface是面向对象编程语言中接口操作的关键字,功能是把所需成员组合起来,用来装封一定功能的集合。它好比一个模板,在其中定义了对象必须实现的成员,通过类或结构来实现它。
2.什么是抽象类(abstract)。
由abstract修饰的类叫抽象类。抽象的类无法进行实例化,因为他不是具体存在的类,或者说这样的类还不够完善,不能直接使用new关键字调用其构造器生成该类的对象。
3.什么是面对对象。
其本质是以建立模型体现出来的抽象思维过程和面向对象的方法,是一种编程思维,也是一种思考问题的方式。面向对象的三大特性:封装,继承,多态。
4.什么是接口。
在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
5.什么是泛型。
泛型:就是一种不确定的数据类型。
比如:ArrayList<E> E就是泛型。 这种不确定的数据类型需要在使用这个类的时候才能够确定出来。// 泛型可以省略,如果省略,默认泛型是Object类型。
泛型的好处: 1. 省略了强转的代码。 2. 可以把运行时的问题提前到编译时期。
6.什么是线程。
线程是程序中部分代码的走向,线程是进程中最小的执行单位。
7.线程的创建方式和区别。
集成thread,重写run方法
实现runnable接口,重写run方法
实现callable接口,重写call方法,相对runnable,可以声明返回类型
区别:
thread方式,最为简单,可以通过this获取当前线程,但是因为继承了thread类,不能在继承其他类了
runnable方式,子类实现这个接口,可以继承其他的类,多个线程可以共享同一个target对象,没有返回值
callable方式,子类实现这个接口,可以继承其他的类,多个线程可以共享同一个target对象,有返回值
8.多线程如何实现以及Java中的线程池
实现多线程的方法:继承Thread类、实现Runnable接口
四种线程池
1.newCachedThreadPool创建一个可缓存线程池程
2.newFixedThreadPool 创建一个定长线程池
3.newScheduledThreadPool 创建一个定长线程池
4.newSingleThreadExecutor 创建一个单线程化的线程池
1。 newFixedThreadPool:所有的任务都在核心线程中执行,且核心线程一旦创建,即使任务执行完成,后期一直处于闲置状态,也不会销毁,线程池会一直对这个线程进行维护,直到线程池关闭。如果所有的核心线程都处于活动状态,新加入的任务会被放到linkedblockingqueue这个队列当中,且这个队列没有大小限制。因为核心线程创建后不会被销毁,当新的任务加入时,不需要重新创建线程来执行新的任务,所以相应速度非常快,但是因为核心线程不会销毁,如果长时间处于闲置状态,消耗资源,所以这种线程池一般用于不会有太多任务执行的场景下。
2。 newCachedThreadPool:相当于对threadpoolexcutor的一个封装,他的核心线程数量为0,最大线程数量是Integer.MAX_VALUE,线程池对于线程的维护时间是60秒,如果有新的任务,线程池会去内部寻找是否有闲置线程,如果有将任务分发给该线程,如果没有,创建一个非核心线程去执行,当任务执行完成后,线程会等待60秒,如果没有新的任务,将销毁线程。因为最大线程数是一个非常庞大的值,且对于长时间未接受新任务的线程,会回收,所以基本不会达到最大线程的数量,所以内部传入的队列相当于一个空集合,不会使用到。
3。 newScheduledThreadPool:是一个可定时执行或周期执行任务的线程池,对于非核心线程,执行完毕后会立马回收(scheduleWithFixedDelay当上一个任务执行完成,然后延时时间到后开始执行第二个任务,因为任务具体的执行时间不能确定,所以除第一个任务外,其他任务的触发时间不可预知;scheduleAtFixedRate当上一个任务开始执行,延时时间到后开始执行第二个任务,因为延时是一个固定时间,所以所有任务的触发时间可推断)
4.newSingleThreadPool:这个线程池当中只有一个核心线程,且最大线程也是1个,同时只能执行一个任务,其他所有任务都放在阻塞队列中,且这个队列没有大小限制