![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 95
Ty_1106
Keep It Simple, Stupid
展开
-
Java并发编程:并发工具(下)
循环栅栏,用来进行线程协作,等待线程满足某个计数。非线程安全,已经有一个线程做完了扩容操作时,其他线程还在扩容操作,e和next引用没变但内容变了,也就是节点没变,节点后面链着的东西变了,继续扩容时就会死链。采用了写入时拷贝的思想,增删改操作会将底层数组拷贝一份,更改操作在新数组上执行,不影响其他线程并发读,读写分离。问题:多线程计数,get、比较、put,这三个操作彼此是原子的,但是合在一起不是原子的。jdk7中,后加入的元素会放到链表的头部,在数组元素超过数组长度的四分之三时,进行扩容。原创 2024-09-07 13:33:45 · 1010 阅读 · 0 评论 -
Java并发编程:并发工具(上)
常用并发工具类原创 2024-09-07 13:28:11 · 1156 阅读 · 0 评论 -
Java并发编程:JMM与无锁并发
可见性由jvm缓存优化引起,有序性由jvm指令重排序引起主要学习CAS与volatile,以及一些API,需要知道高性能原子累加器LongAdder的源码,以及伪共享的原理。原创 2024-09-07 13:19:24 · 809 阅读 · 0 评论 -
Java并发编程:基础-管程
临界区代码就是访问共享资源时又有读又有写的代码片段有两种关键字对资源进行保护:synchronized、lock(ReentrantLock)明白互斥和同步的区别:互斥:临界区代码不被上下文切换而交错,保证代码的原子性同步:某个线程条件不满足时等待,条件满足后继续运行管程即Monitor。原创 2024-09-07 13:14:09 · 1187 阅读 · 0 评论 -
Java并发编程:基础-进程与线程
操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows 下时间片最小约为 15 毫秒)分给不同的程序使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感 觉是 同时运行的。默认情况下,Java 进程需要等待所有线程都运行结束,才会结束。有一种特殊的线程叫做守护线程,只要其它非守 护线程运行结束了,即使守护线程的代码没有执行完,也会强制结束。因为以下一些原因导致 cpu 不再执行当前的线程,转而执行另一个线程的代码。有时限的join,如果线程提前结束,join也会结束。原创 2024-09-07 13:07:47 · 1007 阅读 · 0 评论