并发
文章平均质量分 79
a_higher
这个作者很懒,什么都没留下…
展开
-
AIO
Java AIONIO2才是实现真正的异步 AIO、把 IO 读写操作完全交给操作系统基本原理服务端:AsynchronousServerSocketChannel客户端:AsynchronousSocketChannel用户处理器:CompletionHandler 接口,这个接口实现应用程序向操作系统发起 IO 请求,当完成后处理具体逻辑,否则做 自己该做的事情,“真正”的异步IO需要操作系统更强的支持。在IO多路复用模型中,事件循环将文件句柄的状态事件通知给用户线程, 由用户线原创 2021-02-01 16:19:58 · 133 阅读 · 0 评论 -
EventLoopGroup 与 Reactor
Reactor 线程模型单线程模型所谓单线程, 即 Acceptor 处理和 andler 处理都在同一个线程中处理。这个模型的坏处显而易见:当其中某个 Handler 阻塞时, 会导致其他所有的 Client 的 Handler 都得不到执行,并且更严重的是,Handler 的阻塞也会导致整个服务不能 接收新的 Client 请求(因为 Acceptor 也被阻塞了)多线程模型与单线程模型的区别就是 Acceptor 是一个单独的线程处理,并且 有一组特定的 NIO 线程来负责各个客户原创 2021-02-01 10:31:43 · 201 阅读 · 0 评论 -
http与https
HTTP 通信协议的组成请求 URI 定位资源URI 用字符串标识某一互联网资源,而 URL 表示资源的地点(互联网上所处的位置)。可 见 URL 是 URI 的子集。URL格式是,如http://www.gupaoedu.com:80/java/index.html?name=mic#head对应为schema://host[:port#]/path/.../?[url-params]#[ query-string]scheme 指定应用层使用的协议(例如:http, https,原创 2021-01-25 22:19:55 · 594 阅读 · 1 评论 -
远程通信协议
知道分层模型可以百度三次握手第 一 次 握 手 (SYN=1, seq=x) 客 户 端 发 送 一 个 TCP 的 SYN 标志 位置 1 的包,指明客 户端打算连接的服 务器的端口,以及 初始序号 X,保存 在 包 头 的 序 列 号 (Sequence Number)字段里。 发送完毕后,客户 端 进 入 SYN_SEND 状态。 第 二 次 握 手(SYN=1, ACK=1, seq=y, ACKnum=x+1): 服务器发回确认包 (ACK) 应 答 。 即 SYN 标志位和.原创 2021-01-25 21:40:42 · 187 阅读 · 0 评论 -
架构基础
架构本质一个软件系统随着功能越来越多,调用量急剧增长,整个系统逐渐碎片化,越来越无序,最 终无法维护和扩展,所以系统在一段时间的野蛮生长后,也需要及时干预,避免越来越无序。 架构的本质就是对系统进行有序化重构,使系统不断进化 那架构是如何实现无序到有序的呢? 基本的手段就是分和合,先把系统打散,然后重新组合。 分的过程是把系统拆分为各个子系统 / 模块 / 组件,拆的时候,首先要解决每个组件的定 位问题,然后才能划分彼此的边界,实现合理的拆分。合就是根据最终要求,把各个分离的 组件有机整合在一起,相对来原创 2021-01-25 21:27:35 · 293 阅读 · 1 评论 -
阻塞队列有哪些
java中的阻塞队列1. ArrayBlockingQueue :由数组结构组成的有界阻塞队列。用数组实现的有界阻塞队列。此队列按照先进先出(FIFO)的原则对元素进行排序。默认情况下 不保证访问者公平的访问队列,所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当 队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入 元素,先阻塞的消费者线程,可以先从队列里获取元素。通常情况下为了保证公平性会降低吞吐 量。我们可以使用以下代码创建一个公平的阻塞队列:ArrayB原创 2021-01-25 17:43:24 · 2551 阅读 · 0 评论 -
synchronized 与 ReentrantLock 对比
synchronized 与 ReentrantLock相同:1. 都是用来协调多线程对共享对象、变量的访问 2. 都是可重入锁,同一线程可以多次获得同一个锁 3. 都保证了可见性和互斥不同:1. ReentrantLock显示的获得、释放锁,synchronized隐式获得释放锁2. ReentrantLock 可响应中断、可轮回,synchronized 是不可以响应中断的,为处理锁的 不可用性提供了更高的灵活性3. ReentrantLock是API级别的,synchronized是.原创 2021-01-25 17:37:10 · 156 阅读 · 0 评论 -
阻塞队列的使用
有哪些为什么阻塞队列这块的应用场景,比较多的仍然是对于生产者消 费者场景的应用,但是由于分布式架构的普及,是的大家 更多的关注在分布式消息队列上。所以其实如果把阻塞队 列比作成分布式消息队列的话,那么所谓的生产者和消费 者其实就是基于阻塞队列的解耦。另外,阻塞队列是一个 fifo 的队列,所以对于希望在线程 级别需要实现对目标服务的顺序访问的场景中,也可以使 用怎么用插入操作add(e) :添加元素到队列中,如果队列满了,继续插入 元素会报错,IllegalStateExcept原创 2021-01-25 15:35:13 · 502 阅读 · 0 评论 -
ConcurrentHashMap源码分析
从put(K key, V value)方法入手public V put(K key, V value) { return putVal(key, value, false); } /** Implementation for put and putIfAbsent */ final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null原创 2021-01-24 22:44:36 · 159 阅读 · 0 评论 -
Java里面volatile关键字修饰引用变量的陷阱
应用场景如果发现该操作已经在执行中则不再执行(有状态执行)如何使用转载 2021-01-22 14:06:51 · 278 阅读 · 0 评论 -
AQS的底层原理分析
本文转载:https://blog.csdn.net/weixin_38087538/article/details/107485155?utm_source=app个人认为他的图可能错了J.U.C 简介Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的 Doug Lea。我们在接下来的课程中,回去剖析一些经典的比较常用的组件的设计思想LockLoc转载 2020-11-22 19:00:47 · 448 阅读 · 0 评论 -
java并发和jvm的联系
引言java内存模型,java内存结构(JVM内存结构)和java对象模型是我们要知道的概念,JVM内存结构,和Java虚拟机的运行时区域有关。 Java内存模型,和Java的并发编程有关。 Java对象模型,和Java对象在虚拟机中的表现形式有关。java程序要运行,会涉及到java线程与操作系统线程的交互,这时就需要java虚拟机做中间商,因此我们可以简单了解在JVM中的java对象模型(参考这篇,其实也是转载,个人觉得这是个狼人)java对象模型本文的所有分析均基于HotSpot虚原创 2020-11-21 15:41:38 · 232 阅读 · 0 评论 -
CAS的简单介绍
CAS(compareAndSwap)无锁原子算法包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可以成功完成操作CPU 实现原子指令有2种方式...原创 2020-06-03 20:23:57 · 616 阅读 · 0 评论 -
synchronized的分类和原理
修饰对象分类同步方法非静态public synchronized void methodName(){}静态方法public synchronized static void methodName(){}同步代码块synchronized(this | object){}获取的锁来分类对象锁修饰非静态方法每个对象有个monitor对象,这个对象其实就是 ...原创 2020-06-03 17:59:07 · 501 阅读 · 0 评论 -
重排序与内存屏障
Java内存模型深度解析:基础部分--转并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显式进行通信。同步是指程序用于控制不同线程之间转载 2020-06-03 12:32:35 · 701 阅读 · 0 评论 -
线程中断
本文转载https://my.oschina.net/ljhlgj/blog/1572376中断线程thread.interrupt()用来中断线程,即将线程的中断状态位设置为true,注意中断操作并不会终止线程,不像stop()会立即终止一个运行中的线程,中断仅仅是将线程中断位设置为true(默认false)。线程会不断的检查中断位,如果线程处于阻塞状态(sleep、join、wait)且中断,就会抛出InterreptException来唤醒线程,交由应用程序处理;如果线程未阻塞且中断,也要交由转载 2020-11-19 14:23:30 · 262 阅读 · 0 评论 -
Happens-before原则了解
Happens-before原则看过网上很多,先记录一下Happens-before规则从JDK5开始,java使用新的JSR -133内存模型(本文除非特别说明,针对的都是JSR- 133内存模型)。JSR-133提出了happens-before的概念,通过这个概念来阐述操作之间的内存可见性。如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须存在happens-before关系。这里提到的两个操作既可以是在一个线程之内,也可以是在不同线程之间。 与程序员密切相关的happen原创 2020-11-19 14:07:21 · 509 阅读 · 1 评论 -
Java内存模型(JMM)
本文转载了bbsmax.com/A/l1dyWLnJem/的部分内容Java内存模型并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过明确的发送消息来显转载 2020-11-19 13:38:20 · 139 阅读 · 0 评论 -
java线程池简单提提
java线程池ThreadPoolExecutor是我们线程池核心类四大线程池newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduledThreadPool线程池原理监控线程执行状态你想监控某一个线程池的执行状态,线程池执行类ThreadPoolExecutor也给出了相关的 API, 能实时获取线程池的当前活动线程数、正在排队中的线程数、已经执行完成的线程数、总线程数等。...原创 2020-11-17 14:59:56 · 170 阅读 · 0 评论 -
并发学习目录
java线程安全的本质是线程执行结果具有正确性线程三大特性(参考这篇)原子性原子性就指是把一个操作或者多个操作视为一个整体,在执行的过程不能被中断的特性叫原子性。原因:我们执行一个操作时,可能会把操作拆分成多个指令交给CPU执行。IO、内存、CPU缓存他们的操作速度有着巨大的差距,操作系统就有了进程和时间片的概念可见性我们在操作CPU缓存过程中,由于多个CPU缓存之间独立不可见的特性,导致共享变量的操作结果无法预期解决:为解决了缓存不可见问题硬件程序就制定了一套保证缓存之间可见的原创 2020-11-17 00:51:20 · 400 阅读 · 0 评论 -
final域、Atomic和ThreadLocal
解决并发2种方式对于并发工作,需要某种方式来防止两个任务同时访问相同的资源,至少在关键阶段不能出现这种冲突情况。资源被一个任务使用时,在其上加锁 根除对变量的共享。线程本地存储是一种自动化机制,可以为使用相同变量的每个不同的线程都创建不同的存储。因此,如果你有5个线程都要使用变量x所表示的对象,那线程本地存储就会生成5个用于x的不同的存储块。它使得你可以将状态与线程关联起来。创建和管理线程本地存储可以由java.lang.ThreadLocal类来实现。final对于final域,编译器和处原创 2020-11-17 00:49:06 · 937 阅读 · 0 评论 -
线程的本质
java并发一、线程是什么线程是操作系统能够进行运算调度的最小单位为什么出现在一个应用进程中,会存在多个同时执行的任务,如果其中一个任务被阻塞,将会引起不依赖该任务的任务也被阻塞。通过对不同任务创 建不同的线程去处理,可以提升程序处理的实时性怎么使用继承Thread 实现Runnable接口 实现Callable接口 通过拿到Future(Future提供了3种功能:(1)能够中断执行中的任务(2)判断任务是否执行完成(3)获取任务执行完成后额结果。)接口对象或Futu...原创 2020-11-16 23:50:55 · 720 阅读 · 0 评论 -
JUC包的简单分析
悲观锁共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程。比如数据库中的行锁,表锁等,读锁,写锁等,java中synchronized和ReentrantLock等独占锁乐观锁每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适用于多读的应用类型,这样可以提高吞...原创 2020-03-13 22:14:14 · 1436 阅读 · 0 评论 -
volatile原理和语义
CPU缓存导致一致性问题解决方案1.总线加锁(粒度太大)2.MESIa.读操作:不做任何事情,把Cache中的数据读到寄存器b.写操作:发出信号通知其他的CPU讲改变量的Cache line置为无效,其他的CPU要访问这个变量的时候,只能从内存中获取java内存模型主存中的数据所有线程都可以访问(共享数据) 每个线程都有自己的工作空间,(本地内存)(私有数...原创 2020-06-03 20:22:40 · 388 阅读 · 0 评论
分享