202207-11 Java面试题冲刺第二十五天--并发编程3 目录面试题1:你了解线程池么?简单介绍一下。追问1:连接池和线程池是一个意思么?有什么区别?不同点面试题2:线程池中核心线程数量大小你是怎么设置的?追问1:核心线程数量过大或过小会造成什么后果?面试题3:线程池都有哪些状态呀?追问1:什么条件下会进入TERMINATED状态总结面试题1:你了解线程池么?简单介绍一下。java提供的一个java.util.concurrent.Executor接口的实现用于创建线程池。线程池是一种多线程处理形式,... 继续阅读 >
202202-11 Java面试题冲刺第二十五天--并发编程2 目录面试题1:简单说下你对线程和进程的理解?正经回答:深入追问:追问1:那进程和线程有哪些区别呢?面试题2:守护线程和用户线程的区别?正经回答:面试题3:什么是线程死锁?正经回答:深入追问:追问1:形成死锁的四个必要条件是什么? 追问2:我们该如何避免死锁?追问3:死锁避免和死锁预防有啥不同?总结面试题1:简单说下你对线程和进程的理解?正经回答:进程一个在内存中运行的应用程序。每个进程都... 继续阅读 >
202202-11 Java面试题冲刺第二十四天--并发编程 目录面试题1:说一下你对ReentrantLock的理解?CAS:AQS:追问1:你认为ReentrantLock相比synchronized都有哪些区别?面试题2:解释一下公平锁和非公平锁?面试题3:能详细说一下CAS具体实现原理么?追问1:那CAS的缺陷有哪些呢?1.ABA:2.自旋消耗资源:3.多变量共享一致性问题:追问2:讲一下什么是ABA问题?怎么解决?总结面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的... 继续阅读 >
202108-12 Java并发编程之Fork/Join框架的理解 一、Fork/Join框架的理解ForkJoinTask类属于java.util.concurrent包下;ForkJoinTask类下有2个子类,分别为RecursiveTask和RecursiveAction类;(lz示例中使用RecursiveTask类进行重写compute()方法进行实现数值的累加计算)ForkJoinTask类将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。二、Fork/Join框架使用示例示例场景:对数值进行累加计算;注:示例中使用F... 继续阅读 >
202107-08 浅谈Java源码ConcurrentHashMap 目录一、记录形式二、ConcurrentHashMap三、关键点一、记录形式打算直接把过程写在源码中,会按序进行注释,查阅的时候可以按序号只看注释部分二、ConcurrentHashMap直接模拟该类的使用过程,从而一步步看其怎么运作的吧,当然最好还是带着问题一遍思考一遍总结会比较好,我阅读源码的时候带着以下几个问题并发体现在哪里?怎么保证线程安全的怎么扩容的?扩容是怎么保证线程安全的?怎么put的?put是怎么保证线程安全... 继续阅读 >
202107-02 Java并发编程之ConcurrentLinkedQueue源码详解 目录一、ConcurrentLinkedQueue介绍二、构造方法三、入队 四、出队五、总结一、ConcurrentLinkedQueue介绍并编程中,一般需要用到安全的队列,如果要自己实现安全队列,可以使用2种方式:方式1:加锁,这种实现方式就是我们常说的阻塞队列。方式2:使用循环CAS算法实现,这种方式实现队列称之为非阻塞队列。从点到面,下面我们来看下非阻塞队列经典实现类:ConcurrentLinkedQueue(JDK1.8版)ConcurrentLinkedQueue是一个... 继续阅读 >
202107-01 Java并发编程之LockSupport类详解 目录一、LockSupport类的属性二、LockSupport类的构造函数三、park(Objectblocker)方法和park()方法分析四、parkNanos(Objectblocker,longnanos)方法和parkNanos(longnanos)方法分析五、parkUntil(Objectblocker,longdeadline)方法和parkUntil(longdeadline)方法分析六、setBlocker(Threadt,Objectarg)和getBlocker(Threadt)方法分析七、unpark(Threadthread)方法分析八、LockSupport优点一、LockSupport类... 继续阅读 >
202106-19 Java并发编程之同步容器 简介同步容器主要分两类,一种是Vector这样的普通类,一种是通过Collections的工厂方法创建的内部类虽然很多人都对同步容器的性能低有偏见,但它也不是一无是处,在这里我们插播一条阿里巴巴的开发手册规范:高并发时,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不要用锁;能锁区块,就不要锁整个方法体;能用对象锁,就不要用类锁。可以看到,只有在高并发才会考虑到锁的性能问题,所以在一些小而全的系统中,同步容... 继续阅读 >
202105-20 Java并发编程之CountDownLatch源码解析 一、前言CountDownLatch维护了一个计数器(还是是state字段),调用countDown方法会将计数器减1,调用await方法会阻塞线程直到计数器变为0。可以用于实现一个线程等待所有子线程任务完成之后再继续执行的逻辑,也可以实现类似简易CyclicBarrier的功能,达到让多个线程等待同时开始执行某一段逻辑目的。二、使用一个线程等待其它线程执行完再继续执行......CountDownLatchcdl=newCountDownLatch(10);ExecutorServicees... 继续阅读 >
202104-27 Java并发编程之Exchanger方法详解 简介Exchanger是一个用于线程间数据交换的工具类,它提供一个公共点,在这个公共点,两个线程可以交换彼此的数据。当一个线程调用exchange方法后将进入等待状态,直到另外一个线程调用exchange方法,双方完成数据交换后继续执行。Exchanger的使用方法介绍exchange(Vx):阻塞当前线程,直到另外一个线程调用exchange方法或者当前线程被中断。x:需要交换的对象。exchange(Vx,longtimeout,TimeUnitunit):阻塞当前线... 继续阅读 >
202102-01 Java并发编程之常用的辅助类详解 1.CountDownLatch 1.2.示例:班长锁门问题问题描述:假如有7个同学晚上上自习,钥匙在班长手上,并且要负责锁门。班长必须要等所有人都走光了,班长才能关灯锁门。这6个同学的顺序是无序的,不知道它们是何时离开。6个同学各上各的自习,中间没有交互。假如说6个学生是普通线程,班长是主线程,如何让主线程要等一堆线程运行完了,主线程才能运行完成呢。publicclassCountDownLatchDemo{publicstaticvoidmain(String[]... 继续阅读 >
202012-22 Java并发包之CopyOnWriteArrayList类的深入讲解 前言大家在学习Java的过程中,或者工作中,始终都绕不开集合。在单线程环境下,ArrayList就可以满足要求。多线程时,我们可以使用CopyOnWriteArrayList来保证数据安全。下面我们一起来看看CopyOnWriteArrayList类中的一些值得学习的方法。CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的,也就是使用了写时复制策略实现的。说明:代码部分,均基于JDK1.8一、添加元... 继续阅读 >
202010-08 浅谈Java并发编程之Lock锁和条件变量 简单使用Lock锁 Java5中引入了新的锁机制——java.util.concurrent.locks中的显式的互斥锁:Lock接口,它提供了比synchronized更加广泛的锁定操作。Lock接口有3个实现它的类:ReentrantLock、ReetrantReadWriteLock.ReadLock和ReetrantReadWriteLock.WriteLock,即重入锁、读锁和写锁。lock必须被显式地创建、锁定和释放,为了可以使用更多的功能,一般用ReentrantLock为其实例化。为了保证锁最终一定会被释放(可能... 继续阅读 >