多线程
rbxu
这个作者很懒,什么都没留下…
展开
-
多线程(五)线程池
本文简述线程池的概念,在编程过程中应该注意哪些问题,从入门的使用到底层原理简述。建议结合(三)数据容器中文的阻塞队列一起,更容易理解线程池。首先弄清楚两个问题:1、线程池是什么?线程池做的工作主要是控制运行线程的数量,处理过程中将任务放入队列,然后再线程创建后启动这些任务,如果线程数量超过了最大数量,超出的线程将排队等待,等其他线程执行完毕,再从队列中取出任务来执行。2、这样做的好处是什么...原创 2019-12-26 19:52:34 · 224 阅读 · 0 评论 -
多线程(四) 锁 Lock
Java中,锁的种类按照不同的维度可以区分出很多的类型,比如是否公平?可读写?可重入?等等。而本文主要介绍JUC并发包Lock接口下锁的实现,以及对常见的锁类型介绍、在实际使用中应该注意什么等。如下图,Lock接口及实现类。区分synchronized和Lock这两者最大的区别:synchronized是Java的一个关键字,Lock是Java并发包下的一个接口。细分两者区别:Jav...原创 2019-12-11 18:10:12 · 208 阅读 · 0 评论 -
多线程(三)数据容器
主要介绍的是JDK自带数据容器在多线程环境下的知识,主要围绕三大数据容器List、Set和Map展开,为避免有重复造轮子的嫌疑,基础知识将不再介绍(类似于Set的底层是Map,HashMap初始容量为什么是16,扩容因子为什么是0.75,什么时候变成红黑树,什么时候变为二叉树等等,将不会介绍),仅仅只说在多线程的环境中,如何保证我们操作的数据容器可靠!安全!高可用!ConcurrentModif...原创 2019-12-03 22:40:57 · 278 阅读 · 0 评论 -
多线程(二)CAS算法和ABA问题
前提要点JMM,在每个线程启动的时候,JVM虚拟机都会为这个线程开辟一个内存空间,他们进行数据运算都是在自己的内存空间中进行的,而变量的可见性是多线程共同合作计算的基础,在多线程编程中,大量的使用了Volatile关键字,根据JMM规范,它能保证内存数据在计算时的可见性和机制指令在CPU执行期间的排序机制,但无法保证原子性。而volatile关键字是怎么做到这一点的呢?CAS算法简洁CA...原创 2019-11-30 22:40:22 · 296 阅读 · 0 评论 -
多线程(一)JMM内存模型
必须前置声明JMM是Java Memory Model 即Java 内存模型,而JVM 是 Java Virtual Machine ,即Java 虚拟机,两者完全不同!JVM的知识会在后续补充。先了解JUC并发编程的知识能帮助更好的了解JVM。Java多线程基础知识一、基础认知(入坑必备)直接先看代码两个线程(main线程和T1线程),三个输出语句在运行时的输出情况。需要说明的是new...原创 2019-11-29 23:56:33 · 335 阅读 · 0 评论