Java并发
liuxinyu9795
这个作者很懒,什么都没留下…
展开
-
五、Java并发-线程池的底层实现
一、使用Java线程池的好处(1)降低资源消耗。通过重复利用已创建的线程降低反复创建和销毁线程的消耗(2)提高响应速度。任务不需要等线程创建就可以执行(3)提高线程的可管理性。使用线程池可以统一分配,调优和监控二、线程池对任务的处理流程(1)线程池判断核心线程池中的线程是否有空余的。如果有,就创建新的工作线程完成任务,没有就下一步(2)线程池判断工作队列是否满了。如果没满就存在工作队列...原创 2019-07-28 23:33:55 · 397 阅读 · 0 评论 -
六、Java并发-JUC包的梳理
一、JUC包的介绍JUC是java.util.concurrent的缩写,提供了并发编程的解决方案1.核心是:(1)CAS:是java.util.concurrent.atomic包的基础(2)AQS:是java.util.concurrent.locks包以及一些常用类比如Semophore,ReentrantLock等类的基础2.JUC包的分类(1)线程执行器executor及其线...原创 2019-07-30 01:38:54 · 1114 阅读 · 0 评论 -
一、Java并发-线程与进程
最近好几天没更博了,刷完了剑指Offer之后,上次oppo和字节都问到了我薄弱的一环——Java并发相关,我这几天去找了几本书看了看,整理记录了一些心得和面试题,分享给大家1.什么是线程?操作系统在运行一个程序时,会为其创建一个进程。而线程就是现在操作系统系统调度的最小单元,也叫轻量级进程,一个进程里可以创建多个线程,这些线程都拥有各自的计数器,堆栈和局部变量等属性,并且能访问共享的内存变量。...原创 2019-07-26 02:01:34 · 202 阅读 · 0 评论 -
二、Java并发-volatile和synchronized的底层实现及不同和CAS的原理
在多线程并发编程中synchronized和volatile都扮演的重要的角色,接下来我们来学习一下他们两个的相关知识及底层原理:1.volatile的定义定义:Java语言允许线程访问共享变量,为了确保共享变量能被准确一致地更新,线程应该确保通过排他锁单独获得这个变量于是Java提供了volatile,某些情况比锁更方便。如果一个字段被声明为volatile,Java内存模型(JMM)确保...原创 2019-07-26 16:02:25 · 715 阅读 · 0 评论 -
三、Java并发-HashMap,HashTable和ConcurrentHashMap的源码学习
一.HashMap的底层实现(1)jdk1.8之前,是采用的数组(Entry)+链表实现的,数组的初始值为16,数组储存的是链表的头结点,而hashcode算法是通过位运算来实现散列运算的存在问题:可能多个值都计算后连接在一个链表上,链表会变得很长,查询性能低(2)jdk1.8之后,采用的是数组(Node)+链表/红黑树实现的,当链表长度等于8时,就会将链表转换为红黑树,这样进行查询就提高...原创 2019-07-27 02:23:41 · 189 阅读 · 0 评论 -
四、Java并发-ReentrantLock原理(AQS)和synchronized的区别
一、ReentrantLock重入锁ReentrantLock,就是支持重进入的锁,它表示该锁能够支持一个线程对资源重复加锁。ReentrantLock虽然不像synchronized关键字支持隐式的重进入,调用Lock方法时,获取到锁的线程仍然能再次调用Lock获取锁而不被堵塞。它提供了与synchronized关键字相似的同步,只是在使用时需要显式的获取和释放锁,缺少了便捷性,但拥有了可操作...原创 2019-07-27 23:50:51 · 3064 阅读 · 1 评论