随笔分类 - 并发
摘要:前言 JDK中的ThreadPoolExecutor线程池相信大家都很熟悉,对于线程池的一些高频面试题,比如有哪些参数,每个参数的含义,什么时候发挥作用,工作流程等问题都能回答上来。而对于一些不是很常见的线程池面试题就显得有点模糊,比如:线程池中线程执行完了一个任务接下来是做什么,是等待还是被收回,
阅读全文
摘要:前言 ArrayBlockingQueue和LinkedBlockingQueue都是JUC包下的阻塞队列,只是实现的方式不同,我们都清楚阻塞队列被运用在线程池中,用来存储要被执行的任务,除了被运用在线程池中,如果有场景需要保证任务被顺序执行,也可以单独的使用到阻塞队列,因为队列具有先入先出(FIF
阅读全文
摘要:前言 之前讲过synchronized关键字在JDK1.7之前是一把重量级的锁,那时JVM还未对synchronized关键字进行优化,所以synchronized会调用操作系统的函数实现加锁和解锁。而在JDK1.7后JVM对其进行优化,synchronized可以通过自旋达到一把轻量级的锁,在JV
阅读全文
摘要:前言 ThreadLocal被称为线程本地存储,也就是实现线程之间的数据隔离。在ThreadLocal中set(变量)作用域属于当前线程,其他线程无法访问到。ThreadLocal的应用场景在Mybatis中的SqlSession管理有体现,因为每个线程都有自己的Session一次数据库会话,这时候
阅读全文
摘要:前言 在我们进行开发时,为了加快程序的运行效率,可能会使用到线程池去加快程序效率,但是线程池也不是随便使用的,如果一旦使用错误,还可能会造成生产事故。在JDK1.5后提供了Executor框架来供开发者使用,无需关心任务如何被执行,如果不清楚线程池原理的话,使用Executor框架也可能会造成生产事
阅读全文
摘要:相信对Java程序员来说,synchronized关键字对大家来说并不陌生,当我们遇到并发情况时,优先会想到用synchronized关键字去解决,synchronized确实能够帮助我们去解决并发的问题,但是它会引起一些其他问题,比如最突出的一点就是程序效率问题,不过后面随着JDK1.6对sync
阅读全文
摘要:在Java中我们都知道synchronized是一个重量级的锁,尽管JVM对synchronized关键字做出了许多优化,但是在多线程的情况下,synchronized的并发效率还是低下,而volatile是synchronized的轻量级的实现,在多线程编程中,能用volatile关键字解决的问题
阅读全文