
并发
文章平均质量分 81
zxfhahaha
这个作者很懒,什么都没留下…
展开
-
【并发】面试整理
有序:TreeMap线程不安全跳表 线程安全ThreadLocal原创 2021-02-25 16:03:12 · 99 阅读 · 0 评论 -
【并发】13、定时任务ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutorschedule延后多少秒执行异步阻塞处理:schedule的callable可以不用让提交任务的线程即主线程一直等着返回结果scheduleAtFixedRate周期性发布任务,每period执行一次任务, 如果任务执行时间大于period,那就会有任务一直堆积scheduleWithFixedDelay周期性发布任务,每次都是任务执行完delay时间后,再次执行任务下面这部分就是任务提交的过程:scheduleWithFix原创 2021-02-04 01:09:19 · 317 阅读 · 1 评论 -
【并发】12、Executor线程池原理与源码解读
Executor线程池原理与源码解读execute()addWorker()runWorker()getTask()Worker属性构造器阿里巴巴规范不建议直接用Executor.newCachedThreadPool(),而是应该手动创建线程池:new ThreadPoolExecutor()public ThreadPoolExecutor(int corePoolSize, //核心线程数int maximumPoolSize,//最大线程数long keepAliveTime,//最大原创 2021-02-03 13:34:54 · 177 阅读 · 0 评论 -
【并发】11、ConcurrentHashMap源码分析
ConcurrentHashMap源码分析1.7属性构造器put()方法1.8构造器ConcurrentHashMap是线程安全的,他是写同步读无锁。 也就是put()的时候会加锁,get()的时候不会加锁1.7ConcurrentHashMap底层是由两层嵌套数组来实现的:ConcurrentHashMap对象中有一个属性segments,类型为Segment[];Segment对象中有一个属性table,类型为HashEntry[];属性segmentsegment继承了R原创 2021-01-29 01:25:31 · 265 阅读 · 0 评论 -
【并发】10、HashMap源码分析
HashMapjdk7 数组+链表(头插法)属性引入链表解决hash冲突,jdk7为头插法HashMap的属性table就是用来存数组加载因子数组容量超过了75% 就会去扩容为什么加载因子默认选择为75?根据牛顿二项式算的,基于空间与时间的折中考虑。因为加载因子过小,也就是过早扩容会浪费很多空间;而加载因子过大,也就是数组都快占满了才扩容的话,这时候发生哈希冲突的概率多,链表就会过长,过长遍历速度就会慢。数组最大长度默认初始容量即数组长度默认为16,必须是2的指数幂,如果不是则原创 2021-01-29 00:34:17 · 148 阅读 · 0 评论 -
【并发】9、Atomic 和UnSafe
Atomic 和UnSafeAtomicIntegerAtomicIntegerArrayCAS修改的ABA问题AtomicIntegergetAndIncrement()offset属性相对于对象起始地址的偏移量AtomicIntegerArray没有修改原值, 是clone了一份CAS修改的ABA问题原创 2021-01-28 19:41:01 · 121 阅读 · 0 评论 -
【并发】AQS总结
AQS总结整体获取锁整体获取锁原创 2021-01-28 15:01:41 · 136 阅读 · 0 评论 -
【并发】8、Semaphore和CountDownLatcn应用及源码分析
SemaphoreSemaphore属性获取信号量释放AQS-Node共享模式acquire()->acquireSharedInterruptibly()release()->releaseShared()Semaphore属性sync 继承了公平类与非公平类state表示最大并行度,相当于总的池子的个数为5获取信号量semaphore.acquire()方法 就是从总的池子里拿出一个凭据,拿一次state就会减1中断方式获取semaphore.acquire(int i)原创 2021-01-28 00:29:32 · 189 阅读 · 0 评论 -
【并发】7、抽象队列同步器AQS应用之阻塞队列BlockingQueue
抽象队列同步器AQS应用之阻塞队列BlockingQueueArrayBlockingQueue 类重要属性构造器put()方法AQSawait()BlockingQueue是线程间通信的工具,在任意时刻、不管并发有多高,在单JVM上,同一时间永远都只有一个线程能够对队列进行入队或出队操作。BlockingQueue的特性:是线程安全的应用场景:对于生产者消费者场景很适合线程池springcloud-Euraka的三级缓存NacosNettyMQ(Roketmq)所有的阻塞队原创 2021-01-27 21:03:06 · 237 阅读 · 0 评论 -
【并发】5、抽象队列同步器AQS应用ReentrantLock
AQSCASReentrantLockAQS源码分析Lock的特性:可重入这个特性就是加了几次锁也要释放几次锁synchronized也有可重入性公平性与非公平性实现锁的核心:CAS保证加锁永远只有一个线程能够成功LockSupport对线程阻塞和唤醒自旋cas加锁失败,则这些线程就要自旋,阻塞住 就不占用cpu资源queue放阻塞的那些线程,用队列是因为队列的FIFO可以保证公平性CASCAS Compare and swap能够保证不管并发有多高,都能保证原创 2021-01-27 00:22:33 · 307 阅读 · 0 评论 -
【并发】4、synchronized
synchronized解决线程并发安全问题synchronized和ReentrantLock发展历程synchronized用法synchronized底层对象头Mark Wordmonitor解决线程并发安全问题Java 中,提供了两种方式来实现同步互斥访问:synchronized和Locksynchronizedsynchronized是jvm提供的内置锁,也叫隐式锁。叫隐式锁的原因是他的加锁与解锁由jvm自动搞定,不需要人为搞定。ReentrantLockReentrantLoc原创 2021-01-25 22:40:27 · 129 阅读 · 0 评论 -
【并发】3、MESI
MESIjava代码volatile底层如何保证可见性MESIstore bufferjava代码一个java类通过javac编译成字节码文件后会通过类加载子系统装载进元空间在堆中生成Class实例创建线程要执行的方法的字节码会加到虚拟机栈栈帧中,执行执行引擎(解释器/JIT)会将字节码翻译成汇编指令(硬件原语)硬件再将汇编指令翻译成二进制,速度非常快这个二进制代码对应的线程被CPU调度后就会被执行因为jvm是klt的,操作系统中会会维护一个线程常量池,其中的每个线程与jvm上的线原创 2021-01-25 18:26:27 · 198 阅读 · 0 评论 -
【并发】2、JMM三大特性与Volatile
JMM三大特性八大可见性原子性有序性内存屏障JMM 是抽象的内存规范对变量有改操作后,会把结果回写回来。,先用assign 把执行引擎的数据同步到工作内存中,然后从工作内存store出来,再用write到主内存中。必须把它的工作内存的数据同步到主内存中八大java并发的三大特性:可见性原子性有序性可见性每个线程只能看到自己的工作内存的更改, 加一个volatile可以及时的看到,但是不加volatile线程在一定的时间之后也会看到,只是看到的时机确定不了。volatile是ja原创 2021-01-25 15:48:40 · 358 阅读 · 0 评论 -
【并发】1、操作系统底层
操作系统底层CPUCPU指令结构CPU缓存结构CPUCPU指令结构CPU需要用到的时候就会把内存中的指令和数据加载到自己的存储单元中main方法启动一个进程,进程就会在内存中开辟这个进程的存储空间,存的包括指令段和数据段,用到他们的时候就会被加载到CPU的存储单元中。Java程序被javac编译成.class字节码文件,然后被classloader即类加载器加载到JVM的运行时数据区的元空间metaspace中,然后元空间就有了指令和数据一个计算机上可以包含多个CPU,一个CPU上包含多个核。原创 2021-01-25 11:10:48 · 192 阅读 · 0 评论