随笔分类 - 多线程高并发
摘要:《Java并发编程之美》 首先要澄清并发和并行的概念,并发是指同一个时间段内多个任务同时都在执行,并且都没有执行结束,而并行是说在单位时间内多个任务同时在执行。并发任务强调在一个时间段内同时执行,而一个时间段由多个单位时间累积而成,所以说并发的多个任务在单位时间内不一定同时在执行。在单CPU的时代多
阅读全文
摘要:异步调用? 在解释异步调用之前,我们先来看同步调用的定义;同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。 异步调用则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕,继续执行下面的流程。例如, 在某个调用中,需要顺序调用 A, B, C三个过程方法;如他们都是同步调用
阅读全文
摘要:ThreadPoolExecutor构造函数如下 线程池的参数 (1)corePoolSize corePoolSize 指的是核心线程数,线程池初始化时线程数默认为 0,当有新的任务提交后,会创建新线程执行任务,如果不做特殊设置,此后线程数通常不会再小于 corePoolSize ,因为它们是核心
阅读全文
摘要:synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别? ReentrantLock 是 Lock 的默认实现方式之一,它是基于 AQS(Abstract Queued Synchronizer,队列同步器)实现的,它默认是通过非公平锁实现的,在它的内部有一个 s
阅读全文
摘要:谈谈你对死锁的理解? 发生场景 死锁一定发生在并发场景中。我们为了保证线程安全,有时会给程序使用各种能保证并发安全的工具,尤其是锁,但是如果在使用过程中处理不得当,就有可能会导致发生死锁的情况。 定义 死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下,
阅读全文
摘要:悲观锁和乐观锁并不是某个具体的“锁”而是一种并发编程的基本概念,是根据看待并发同步的角度。乐观锁和悲观锁最早出现在数据库的设计当中,后来逐渐被 Java 的并发包所引入。 悲观锁 悲观锁认为对于同一个数据的并发操作一定是会发生修改的,采取加锁的形式,悲观地认为,不加锁的并发操作一定会出问题。传统的关
阅读全文
摘要:在讲volatile关键字之前我们先了解Java的内存模型,Java内存模型规定所有的变量都是存在主存当中,每个线程都有自己的工作内存。线程对变量的所有操作都必须在自己的工作内存中进行,而不能直接对主存进行操作。各线程间的工作内存互不干扰。 谈一下你对 volatile 关键字的理解?( volat
阅读全文
摘要:线程(Thread)是并发编程的基础,一般会作为并发编程的起始问题,用于引出更多的关于并发编程的面试问题。对于线程的掌握程度也决定了你对并发编程的掌握程度。 什么是进程?线程?区别? 详细介绍请查阅我的另一篇博文——进程?线程?协程? 线程安全? 详细介绍请查阅我的另一篇博文——线程安全 创建线程的
阅读全文
摘要:本篇内容为线程专题 -- 线程的创建,状态,工作过程中的部分内容。 二者区别 sleep()和wait()都是使线程暂停执行一段时间的方法。 1)原理不同 sleep()方法是Thread类中的一个静态方法,是线程用来控制自身流程的。 wait()方法是Object类中的方法,用于线程间的通信。 2
阅读全文

浙公网安备 33010602011771号