进行Java面试,面试官经常会考关于高并发的题目,毕竟高并发在java知识点中很重要,而在实际工作中,也是一项重要的实操点,那Java面试题如何处理高并发?下面来我们就来给大家讲解一下。
高并发的解决方法有俩种,一种是使用缓存、另一种是使用生成静态页面;还有就是从最基础的地方优化我们写代码减少不必要的资源浪费:
1.不要频繁的new对象,对于在整个应用中只需要存在一个实例的类使用单例模式.对于String的连接操作,使用StringBuffer或者StringBuilder.对于utility类型的类通过静态方法来访问。
2. 避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式.使用JAVA中效率高的类,比如ArrayList比Vector性能好。
Java高并发面试题有哪些?
1.什么是Callable和Future?
Java 5在concurrency包中引入了java.util.concurrent.Callable 接口,它和Runnable接口很相似,但它可以返回一个对象或者抛出一个异常。
Callable接口使用泛型去定义它的返回类型。Executors类提供了一些有用的方法去在线程池中执行Callable内的任务。由于Callable任务是并行的,我们必须等待它返回的结果。java.util.concurrent.Future对象为我们解决了这个问题。在线程池提交Callable任务后返回了一个Future对象,使用它我们可以知道Callable任务的状态和得到Callable返回的执行结果。Future提供了get()方法让我们可以等待Callable结束并获取它的执行结果。
2.为什么我们调用start()方法时会执行run()方法,为什么我们不能直接调用run()方法?
执行start方法,jvm会调用native方式启动另外一个线程去执行thread的run方法,起到的多线程执行的效果、如果直接执行thread的run方法,相当于在主线程中执行一个普通的run方法。
3.说说并发与并行的区别?
并发:同一时间只有一个线程在执行。多个线程竞争获取CPU的执行片段
并行:同一时间有多个线程在执行。
4.线程池中 submit()和 execute()方法有什么区别?
execute()方法实际上是Executor中声明的方法,在ThreadPoolExecutor进行了具体的实现,这个方法是ThreadPoolExecutor的核心方法,通过这个方法可以向线程池提交一个任务,交由线程池去执行。
submit()方法是在ExecutorService中声明的方法,在AbstractExecutorService就已经有了具体的实现,在ThreadPoolExecutor中并没有对其进行重写,这个方法也是用来向线程池提交任务的,但是它和execute()方法不同,它能够返回任务执行的结果,去看submit()方法的实现,会发现它实际上还是调用的execute()方法,只不过它利用了Future来获取任务执行结果。
关于高并发的面试题建议大家多看看,因为在面试中经常会问到,我们看的多了,有经验了,在面试中就知道如何解决了!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。
推荐阅读: