![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
文章平均质量分 96
玉爷~
技术学的好,讨饭讨到老。
展开
-
多线程与高并发
synchronized锁升级:(1)偏向锁(markword 记录这个线程ID)(2)如果有其他线程争用,升级为自旋锁(3)默认争抢10次以后,重量级锁 - OS自旋锁占CPU,但是不访问操作系统,在用户态解决所得问题,不经过内核态,所以效率更高。...原创 2022-07-11 19:36:07 · 589 阅读 · 3 评论 -
锁
在java多线程中,我们知道可以使用synchronized关键字来实现线程间的同步互斥工作,那么其实还有一个更优秀的机制去完成这个“同步互斥”工作,他就是Lock对象,我们主要学习两种锁,重入锁和读写锁。他们具有比synchronized更为强大的功能,并且有嗅探锁定、多路分支等功能。1、ReentrantLock重入锁重入锁,在需要进行同步的代码部分加上锁定,但不要忘记最后一定要释放锁...原创 2019-09-04 23:41:49 · 132 阅读 · 0 评论 -
Concurrent.util常用类
1、CyclicBarrier假设有只有的一个场景:每个线程代表-一个 跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待。测试:import java.util.Random;import java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBar...原创 2019-09-04 23:38:05 · 135 阅读 · 0 评论 -
线程池
1、Executor框架为了更好的控制多线程,JDK提供了一套线程框架Executor, 帮助开发人员有效地进行线程控制。它们都在java.util.concurrent包中,是JDK并发包的核心。其中有一个比较重要的类: Executors, 他扮演这线程工厂的角色,我们通过Executors可以创建特定功能的线程池。Executors创建线程池方法:newFixedThreadPool...原创 2019-09-04 23:33:46 · 116 阅读 · 0 评论 -
多线程设计模式——生产者-消费者
生产者和消费者也是- -个非常经典的多线程模式,我们在实际开发中应用非常广泛的思想理念。在生产消费模式中:通常由两类线程,即若千个生产者的线程和若千个消费者的线程。生产者线程负责提交用户请求,消费者线程则负责具体处理生产者提交的任务,在生产者和消费者之间通过共享内存缓存区进行通信。...原创 2019-08-30 13:21:39 · 138 阅读 · 0 评论 -
多线程设计模式——Master-Worker模式
Master-Worker模式是常用的并行计算模式。它的核心思想是系统由两类进程协作工作: Master进程和Worker进程。Master 负责接收和分配任务,Worker负责处理子任务。当各个Worker子进程处理完成后,会将结果返回给Master,由Master做归纳和总结。其好处是能将-一个大任务分解成若千个小任务,行执行,从而提高系统的吞吐量。简单实现:代码结...原创 2019-08-29 22:56:10 · 389 阅读 · 0 评论 -
多线程设计模式——Future模式
Future模式有点类似于商品订单。比如在网购时,当看重某一件商品事,就可以提交订单,当订单处理完成后,在家里等待商品送货上门即可。或者说更形象的我们发送Ajax请求的时候,页面是异步的进行后台处理,用户无须一直等待请求的结果,可以继续浏览或操作其他内容。代码实现:public interface Data { String getRequest(); }pu...原创 2019-08-29 15:03:48 · 165 阅读 · 0 评论 -
同步类容器和并发类容器
1、同步类容器同步类容器都是线程安全的,但在某些场景下可能需要加锁来保护复合操作。复合类操作。如:迭代(反复访问元素,遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的行为,最经典的便是ConcurrentModificationException,原因是当容器迭代的过程中,被并发的修改了内容,这是由...原创 2019-08-29 13:45:12 · 119 阅读 · 0 评论 -
使用wait/notify模拟BlockingQueue
BlockingQueue:就是带有阻塞功能的队列import java.util.LinkedList;import java.util.concurrent.TimeUnit;import java.util.concurrent.atomic.AtomicInteger;public class MyQueue { private LinkedList<Object&...原创 2019-08-29 00:09:48 · 132 阅读 · 0 评论 -
线程之间的通信
线程通信的概念线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一,当线程存在通信指挥,系统间的交互性会更强大,在提高CPU的利用率的同时还会使开发人员对线程任务在处理的过程中进行有效的把控与监督。使用wait/notify方法实现线程的通信。(注意这两个方法都是object的类的方法,换句话说java为所有的对象提供了这两个方...原创 2019-08-29 00:09:31 · 160 阅读 · 0 评论 -
volatile
1、可见性volatile概念:volatile关键字的主要作用是使用变量在多个线程间可见例1:public class Volatile01 extends Thread { private volatile boolean isRunning = true;//volatile private void setRunning(boolean isRunning) { t...原创 2019-08-28 15:29:08 · 88 阅读 · 0 评论 -
synchronized
1、线程安全案例:public class MyThread extends Thread { private int count = 5; @Override public synchronized void run() { System.out.println(this.currentThread().getName() + " " + --count); } ...原创 2019-08-28 15:20:15 · 374 阅读 · 0 评论