-
什么是多线程环境下的伪共享(false sharing)?
答:在多核的CPU架构中,每个处理器都有自己的局部缓存,缓存系统是以缓存行为单位存储的,当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。 -
同步和异步有何异同?
答:同步就是事情必须一件一件的做,下一件事的开始必须在上一件事结束后。异步就是下一件事的开始无需等待上一件事的结束,两件事之间没有强关联。 -
调用start()方法时会执行run()方法,为什么不能直接调用run()方法?
答:调用start()方法时,JVM底层会帮我们生产新的线程,然后再通过这个线程来调用run()方法里的逻辑,而直接调用run()方法则不同,不会产生新线程,就是简简单单把run()方法当成普通方法运行。 -
stop()方法和 suspend()方法为何不推荐使用?
答: 首先两者都做到停止线程的效果,其中stop() 方法的停止很暴力,不安全,容易造成数据的不一致。而 suspend() 方法的停止很无赖,它不会释放锁,这就容易造成死锁了。 -
如何让正在运行的线程暂停一段时间?
答:使用sleep()方法或wait()方法。 -
线程状态,BLOCKD和WAITING有什么区别?
答:当线程无法进入同步方法或者同步代码块中时,线程状态就是BLOCKD,这个线程这时处于同步队列。当线程调用了wait,join等方法就会进入WAITING状态,这时线程处于等待队列。当处于等待队列的线程通过notify(),notifyAll()等方法被唤醒时,就会进入同步队列。 -
提交任务时,线程池队列已满时会发会生什么?
答:可参考本篇博客【简单了解线程池】中的线程池工作流程图。 -
线程池中submit() 和 execute()方法有什么区别?
答:两者都可以用于向线程池提交任务。不过submit()方法的返回值是Future类型,而execute()方法无返回值。submit()方法方便Exception处理。 -
说说什么是CountDownLatch?
答:可参考本篇博客【CountDownLatch的简单应用和实现原理 】。 -
说说什么是CyclicBarrier?
答:可参考本篇博客【CyclicBarrier的简单使用】。
java并发面试题(五)
猜你喜欢
转载自blog.csdn.net/weixin_38106322/article/details/104510974
今日推荐
周排行