多线程 高并发
wjf_jone
这个作者很懒,什么都没留下…
展开
-
多线程设计模式之Future 设计模式
Future 设计模式就好像我们在发送ajax请求一样,页面是异步的进行后台处理,用户无须一直等待请求的结果,可以继续浏览或操作其他内容。这个图就很清楚的讲清楚了这个模式,当客户端发送数据过去,服务端会进行处理,但是为了保证用户体验,用户可以进行其他操作,当用户需要该数据的时候,进行请求即可,这种模式适用于有很多数据需要处理的时候,可以让后台去处理,我们可以进行自己想要的操作。完整代码如下:请求的数据对象接口:public interface Data { String getReque原创 2020-10-21 21:18:09 · 253 阅读 · 0 评论 -
多线程设计模式之Single Thread Execution 设计模式——机场过安检
Single Thread Execution 模式是指在同一时刻只能有一个线程去访问共享资源,就像独木桥一样每次只允许一人通行,简单来说, Single Thread Execution 就是采用排他式的操作保证在同一时刻只能有一个线程访问共享资源。下面我们以机场过安检进行该模式的讲解:机场过安检先模拟一个非线程安全的安检口类,旅客(线程)分别手持登机牌和身份证接受工作人员的检查,示例代码如下所示。public class FlightSecurity { private int cou原创 2020-10-19 19:45:11 · 293 阅读 · 0 评论 -
并发 Queue,ConcurrentLinkedQueue,BlockingQueue,PriorityBlockingQueue,DelayQueue
在并发队列上 JDK 提供了两套实现,一个是以 ConcurrentLinkedQueue 为代表的高性能队列,一个是以 BlockingQueue 接口为代表的阻塞队列,无论哪种都继承自 Queue。ConcurrentLinkedQueue这是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能, 通常 ConcurrentLinkedQueue 性能好于 BlockingQueue。它是一个基于链接节点的无界 线程安全队列。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最原创 2020-10-18 09:22:49 · 277 阅读 · 1 评论 -
同步类容器和并发类容器
**同步类容器**同步类容器都是线程安全的,同步容器类包括 Vector 和 HashTable,二者都是早期 JDK 的一部分,此外还包括在 JDK1.2 当中添加的一些功能相似的类,这些同步的封装类是由 Collections.synchronizedXxx 等工厂方法创建的。 但在某些场景下可能需要加锁来保护复合操作。复合类操作如:迭代(反复访问元素, 遍历完容器中所有的元素)、跳转(根据指定的顺序找到当前元素的下一个元素)、以及条件运算。这些复合操作在多线程并发地修改容器时,可能会表现出意外的原创 2020-10-17 20:39:44 · 124 阅读 · 0 评论 -
简单讲解ThreadLocal
Threadlocal 概念线程局部变量,是一种多线程间并发访问变量的解决方案。与其 synchronized 等加锁的方式不同, ThreadLocal 完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。从性能上说, ThreadLocal 不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全无关的线程安全解决方案,在高并发量或者竞争激烈的场景, 使用 ThreadLocal 可以在一定程度上减少锁竞争。public class Conn原创 2020-10-16 21:17:31 · 121 阅读 · 0 评论 -
模拟阻塞 Queue
BlockingQueue 即阻塞队列,它是基于 ReentrantLock,依据它的基本原理,我们可以实现 Web 中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所示:在 Java 中,BlockingQueue是一个接口,它的实现类有 ArrayBlockingQueue、 DelayQueue 、 LinkedBlockingDeque 、 LinkedBlockingQueue 、 PriorityBlockingQueue、SynchronousQueue 等,它原创 2020-10-15 21:04:50 · 272 阅读 · 2 评论 -
volatile关键字的用法
volatile 关键字的概念volatile 概念:volatile 关键字的主要作用是使变量在多个线程间可见。public class VolatileDemo extends Thread { private volatile boolean isRunning = true; private void setRunning(boolean isRunning) { this.isRunning = isRunning; } @Overrid原创 2020-10-14 21:08:16 · 237 阅读 · 0 评论 -
java 线程之间的通信-生产者消费者问题
线程间的通信线程间通信又称为进程内通信,多个线程实现互斥访问共享资源时会互相发送信号或等待信号,比如线程等待数据到来的通知,线程收到变量改变的信号等。1 单线程间通信1.1 初识 wait 和 notify假设我们现在需要两个线程,一个负责生产数据,一个负责消费数据,理想状态下我们希望一边生产一边消费。public class ProduceConsumerVersion { private final Object LOCK = new Object(); private int原创 2020-10-11 20:38:50 · 202 阅读 · 2 评论 -
浅谈synchronized锁对象
我们知道,多个线程争抢同一个 monitor 的 lock 会陷入阻塞进而达到数据同步、资源同步的目的,而大家可能比较疑惑,这个monitor到底是啥?this monitor在下面的代码 ThisMonitor 中,两个方法 methodl 和 method2 都被 synchronized 关键字修饰,启动了两个线程分别访问 method1 和 method2。public class ThisMonitor { public synchronized void method1() {原创 2020-10-10 20:39:25 · 428 阅读 · 0 评论 -
多线程之synchronized 关键字的用法
初识 synchronized 关键字synchronized 提供了一种排他机制,也就是在同一时间只能有一个线程执行某些操作。也就是说如果多个线程对index变量(共享变量/资源同时操作)而引起的数据不一致的问题,我们可以使用该关键字去解决。什么是 synchronized?synchronized 关键字可以实现一个简单的策略来防止线程干扰 和内存一致性错误,如果一个对象对多个线程是可见的,那么对该对象的所有读或者写都将通过同步的方式来进行。synchronized 关键字的用法synchro原创 2020-10-09 21:46:34 · 307 阅读 · 0 评论 -
join方法应用之—查询航班信息
哈喽,小伙伴们,大家好。本章节继续分享join应用,希望大家有所收获。好了,废话不多说,进入正题。需求:假设一个软件,需要实现这样一个功能,主要用于查询航班信息,你的软件没有这些实时数据的,所以当用户发起查询请求时,你需要到各大航空公司的接口获取信息,最后统一整理加工返回到客户端。需求大概如下图:分析:其实功能很简单,就是我们输入起始地址,然后去查询每一家航空公司的航班信息,返回给我们,我们处理之后,再返回给客户端。就是先串行然后并行然后串行,即串行任务局部并行。第一步:定义一个接口/**原创 2020-10-08 15:21:20 · 719 阅读 · 0 评论