java并发面试题有哪些?java并发面试题分享

阳光 2022-08-02 15:20:49 java常见问答 8461

正因为java是技术岗位,所以面试java要求很严格,所以想要入行java,一定要学好java知识,这样才能通过面试,那java并发面试题有哪些?下面来我们就来给大家讲解一下java并发面试题。

java并发面试题.jpg

一、ReentrantLock的公平锁和非公平锁的底层如何实现?

首先不管是公平锁和非公平锁,它们的底层实现都会使用AQS来进行排队,它们的区别在于;线程在使用lock()方法加锁时,如果是公平锁,会先检查Aqs队列中是否存在线程在排队,如果有线程在排队,则当前线程也进行排队,如果是非公平锁,则不会去检查是否有线程在排队,而是直接竞争锁。

不管是公平锁还是非公平锁,一旦没竞争到锁,都会进行排队,当锁释放时,都是唤醒排在最前面的线程,所以非公平锁只是体现在了线程加锁阶介段,而没有体现在线程被唤醒阶段。

另外,ReentrantLock是可重入锁,不管是公平锁还是非公平锁都是可重入的。

二、为什么使用线程池?

降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。

提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。

提高线程的可管理性。统一管理线程,避免系统创建大量同类线程而导致消耗完内存。

三、什么是多线程中的上下文切换?

多线程会共同使用一组计算机上的 CPU,而线程数大于给程序分配的 CPU 数量时,为了让各个线程都有执行的机会,就需要轮转使用 CPU。不同的线程切换使用CPU 发生的切换数据等就是上下文切换。

四、Java中Runnable和Callable有什么不同?

Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。

五、volatile 变量和 atomic 变量有什么不同?

首先,volatile 变量和 atomic 变量看起来很像,但功能却不一样。Volatile变量可以确保先行关系,即写操作会发生在后续的读操作之前, 但它并不能保证原子性。例如用volatile修饰count变量那么 count++ 操作就不是原子性的。而AtomicInteger类提供的atomic方法可以让这种操作具有原子性如getAndIncrement()方法会原子性的进行增量操作把当前值加一,其它数据类型和引用变量也可以进行相似操作。

六、Thread 类中的start() 和 run() 方法有什么区别?

start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程。

在面试中会问到各式各样的问题,大家也不必感觉到担忧,只要我们将该掌握的知识都掌握好,面试也不会太难的!最后大家如果想要了解更多Java面试题知识,敬请关注奇Q工具网。

推荐阅读:

用java如何写一个表白程序?java浪漫表白流星图实例

grails框架技术特性和优劣有哪些?grails框架技术特性和优劣分析

java线程池工作原理是什么?java如何实现一个线程池?