-
多线程
Q1:多线程的实现方式:继承Thread类、实现Runnable接口
Q2:启动一个线程是用run()还是start()? 用start(),run()是调用普通方法而start()则是通过JVM自动调用run()方法
Q3:Sleep()和wait()的区别? sleep()必须是指定时间,就是一段时间内不释放。是Thread类中的一个方法
同步锁:
Q4.线程池,以及应该如何创建线程池
newSingleThreadExecutor:单个线程的线程池,即线程池中每次只有一个线程工作,单线程串行执行任务
newFixedThreadExecutor:固定数量的线程池,没提交一个任务就是一个线程,直到达到线程池的最大数量,然后后面进入等待队列直到前面的任务完成才继续执行
newCacheThreadExecutor:可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行
newScheduleThreadExecutor:大小无限制的线程池,支持定时和周期性的执行线程
应该如何创建线程池:调用ThreadPoolExecutor,代码如下:
private static ExecutorService executor
= new ThreadPoolExecutor(10, 10, 60L, TimeUnit.SECONDS, new ArrayBlockingQueue(10));
-
集合
Q1:ArrayList和LinkedList的数据结构
ArrayList是Object[],对象数组
LinkedList是链表结构
Q2:ArrayList和LinkedList的区别
ArrayList查询效率高,增删效率低。适用于查询操作多的场景
LinkedLis增删效率高,查询效率低。适用于增删操作多的场景
如果实际场景中,两种情况都有,无法判断哪个多时,则可以使用List。d