Java面试技术栈(六): IO、多线程、集合

  • 多线程

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

猜你喜欢

转载自blog.csdn.net/fengj20015/article/details/108351007