
Java 并发编程汇总
文章平均质量分 86
java并发编程-个人汇总
wa_c777
知行合一
展开
-
java并发编程汇总15:线程池中多余的线程如何回收
以1.8为例。1.runWorker(Worker w)工作线程启动后,就进入runWorker(Worker w)方法。里面是一个while循环,循环判断任务是否为空:若不为空,执行任务; 若取不到任务,或发生异常,退出循环,执行processWorkerExit(w, completedAbruptly); 在这个方法里把工作线程移除掉。取任务的来源有两个,一个是firstTask,这个是工作线程第一次跑的时候执行的任务,最多只能执行一次,后面得从getTask()方法里取任..原创 2021-03-15 11:55:46 · 629 阅读 · 0 评论 -
java并发编程汇总14:线程池实现原理
原以为自己很了解线程池,结果差点酿成大祸。一句话总结来说就是,没有领悟到线程池的精髓!还好问题本身发现了,也算是一笔极宝贵的经验!戒骄戒躁,发现存在的问题,持续前行!一、线程池简介1.1、线程池是什么线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做..原创 2021-03-15 11:21:50 · 485 阅读 · 0 评论 -
java并发编程汇总13:经典面试题-生产者消费者问题(三种实现)
直接看你听大佬的写的博客吧:一篇文章,让你彻底弄懂生产者--消费者问题三种实现方式:wait/notify、Condition、BlockingQueue;其中:wait/notify、Condition用法基本一致,要注意的细节就是:Condition一定要finally解锁;BlockingQueue的话就是,由于BlockingQueue内部实现就附加了两个阻塞操作。即当队列已满时,阻塞向队列中插入数据的线程,直至队列中未满;当队列为空时,阻塞从队列中获取数据的线程,直至队列非空时为止。可原创 2021-02-22 11:06:49 · 182 阅读 · 0 评论 -
java并发编程汇总12:并发工具类:Semaphore,Exchanger,CountDownLatch,CyclicBarrier
参考以前写的博客:详解 Java并发工具类:Semaphore,Exchanger以及:大白话说java并发工具类-CountDownLatch,CyclicBarrier总体概括:1、Semaphore可以理解为信号量,用于控制资源能够被并发访问的线程数量,以保证多个线程能够合理的使用特定资源。Semaphore就相当于一个许可证,线程需要先通过acquire方法获取该许可证,该线程才能继续往下执行,否则只能在该方法出阻塞等待。当执行完业务功能后,需要通过release()方法..原创 2021-02-22 10:43:57 · 233 阅读 · 0 评论 -
java并发编程汇总11:Future、FutureTask
public interface RunnableFuture<V> extends Runnable, Future<V> { void run();}public class FutureTask<V> implements RunnableFuture<V> { public FutureTask(Callable<V> callable) { if (callable == null) ...原创 2021-02-22 09:53:18 · 204 阅读 · 0 评论 -
java并发编程汇总10:线程池框架
主要参考以前写的博客:1:深入理解线程池、及线程池的使用2:java.util.concurrent.Executor、ExecutorService、ThreadPoolExecutor、Executors,ThreadFactory框架性总结:1、按顺序:java.util.concurrent.Executor、ExecutorService、ThreadPoolExecutor、Executors,ThreadFactory按以上总结:Executor:执行器接口..原创 2021-02-21 10:55:11 · 222 阅读 · 0 评论 -
java并发编程汇总9:详解 Condition
详见:详解 Condition的await和signal 等待/通知机制从整体上来看Object的wait和notify/notify是与对象监视器配合完成线程间的等待/通知机制;而Condition与Lock配合完成等待通知机制;前者是java底层级别的,后者是语言级别的,具有更高的可控制性和扩展性。两者除了在使用方式上不同外,在功能特性上还是有很多的不同:Condition能够支持不响应中断,而通过使用Object方式不支持; Condition能够支持多个等待队列(new 多个C原创 2021-02-19 11:37:50 · 202 阅读 · 0 评论 -
java并发编程汇总8:ReentrantReadWriteLock
总体见:详解 读写锁ReentrantReadWriteLock读写所允许同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程和其他的写线程都会被阻塞。归纳总结:公平性选择:支持非公平性(默认)和公平的锁获取方式,吞吐量还是非公平优于公平; 重入性:支持重入,同一线程读锁获取后能再次获取,同一线程写锁获取之后能够再次获取写锁,同时也能够获取读锁; 锁降级:遵循先获取写锁,然后获取读锁再释放写锁的次序,写锁能够降级成为读锁要想能够彻底的理解读写锁必须能够理解这样几个问题:读写锁是怎原创 2021-02-19 11:06:17 · 161 阅读 · 0 评论 -
java并发编程汇总7:ReentrantLock
以前的博客:详解 ReentrantLockReentrantLock的源码非常简单,它通过内部类实现了AQS框架,Lock接口的实现仅仅是对AQS的api的简单封装。主要也就是ReentrantLock同步语义的学习:1. 重入性的实现原理;2. 公平锁和非公平锁。(默认实现:非公平锁)一、重入性的实现原理要想支持重入性,就要解决两个问题:1. 在线程获取锁的时候,如果已经获取锁的线程是当前线程的话则直接再次获取成功;2. 由于锁会被获取n次,那么只有锁在被释放同样的.原创 2021-02-19 10:23:12 · 163 阅读 · 0 评论 -
java并发编程汇总6:locks框架、AQS详解
由于是准备校招面试,这些知识不再是初学了,再按照初学那么整理进度太慢;决定直接看之前写的博客,这里仅做框架式的知识梳理,便于形成架构;若有疏漏的知识点再做详细补充;Java 并发编程(五):详解 Lock、AbstractQueuedSynchronizer一、关于lock:0、concurrent包架构:1、locks包架构、简介:2、lock与synchronized的简单对比3、Lock结构的常用方法:lock()、unlock()、lockInterru.原创 2021-02-19 09:59:38 · 196 阅读 · 0 评论 -
java并发编程汇总5:ThreadLocal、ThreadLocal内存泄漏问题及解决方法
1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于:多个线程会对同一个临界区共享资源进行操作,那么,如果每个线程都使用自己的“共享资源”,各自使用各自的,又互相不影响到彼此即让多个线程间达到隔离的状态,这样就不会出现线程安全的问题。事实上,这就是一种“空间换时间”的方案,原创 2021-02-18 15:24:43 · 481 阅读 · 0 评论 -
java并发编程汇总4:final关键字
之前明明及得做过final关键字的学习笔记啊。。。嗯。。。在本地文档库里找了半天没找到,补上吧,复习一遍~这一块主要是参考:「你听__」你以为你真的了解final吗?学习的,整理的非常好,推荐~仅整理关键部分,部分详细见原博文(尤其第四部分、第六部分)一、final简介final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String类就是一个final类型的类。即使能够知道final具体的使用方法,我想对final在多线程中存在的重排序问题也很容..原创 2021-02-17 16:31:09 · 159 阅读 · 0 评论 -
java并发编程汇总3:synchronized、volatile、java对象结构、CAS
参考之前写的博客:Java 并发编程(三):synchronized、volatile 详解java对象结构梳理一下整体结构:1、synchronized关键字(锁:阻塞式、重量级)、对象锁机制monitor;2、CAS(锁:乐观、非阻塞、无锁)、以及存在的三个问题;3、Java对象头结构:包含:MarkWord、Klass Word、数组长度、对象体、对齐字; Klass Word:JVM通过这个指针确定对象是哪个类的实例。 MarkWord中锁的四种状态:无锁01、偏向.原创 2021-02-17 15:04:51 · 131 阅读 · 0 评论 -
java并发编程汇总2:JMM java内存模型、as-if-serial原则、happens-before原则、volatile关键字
总体介绍,看之前写的博客:Java 并发编程(二):Java内存模型以及 happens-before 规则整体架构也是:JMM介绍、抽象结构,重排序,as-if-serial,happens-before; 同时讲解:volatile关键字;另参考其他博主的优质博客:吃透Java并发四:Java内存模型然后再做一些补充:1、共享变量:再次强调实例字段、静态字段和数组对象;但是不包括局部变量和方法参数,因为后者是线程私有的,不会被共享,自然不存在竞争的问题。2...原创 2021-02-16 10:15:03 · 274 阅读 · 0 评论 -
java并发编程汇总1:并发、java线程(包括:状态、阻塞唤醒等)
在此将已掌握的并发编程知识进行汇总,形成一个框架、体系,便于以后的查阅。一、并发的概念1.1、什么是并发;通过并发编程的形式可以将多核CPU的计算能力发挥到极致,性能得到提升; 面对复杂业务模型,并行程序会比串行程序更适应业务需求,而并发编程更能吻合这种业务拆分。1.2、进程与线程;进程:分配和管理资源的基本单位 线程:CPU调度的最小单位,必须依赖进程而存在。 对Java语言来说,Java程序是运行在JVM上面的,每一个JVM其实就是一个进程。所有的资源分配都是基于JVM进程来的.原创 2021-02-14 15:36:49 · 287 阅读 · 1 评论