
并发编程
文章平均质量分 66
酒醉梦醒
JAVA
展开
-
ConcurrentHashMap-put
ConcurrentHashMap-put推荐先读:ConcurrentHashMap属性解释putVal主流程initTable初始化table分支流程helpTransfer帮助扩容分支流程putVal主流程锁住桶后,链表插入/更新putVal主流程锁住桶后,红黑树插入/更新putVal主流程addCount(LongAdder自增和并发扩容)transfer方法才是真正扩容方法,加上红黑树的读写锁设计这两块比较难,后续会补上...原创 2021-05-20 12:35:27 · 386 阅读 · 0 评论 -
ConcurrentHashMap-属性解释
ConcurrentHashMap-属性解释代表hashmap最大能存这么多个键值对高两位目的是为了控制?知道的评论区说下private static final int MAXIMUM_CAPACITY = 1 << 30;代表hashmap默认容量private static final int DEFAULT_CAPACITY = 16;数组的最大长度static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;默认的原创 2021-05-19 20:38:20 · 545 阅读 · 0 评论 -
LongAdder是啥?
本文源码研究基于jdk1.8阅读ConcurrentHashMap源码的时候发现了很多CountCell,看不太懂,所以先来研究一下LongAdder。LongAdder是啥?LongAdder是用来做线程安全的i++自增操作的,我们知道AtomicLong也可以现实这个功能,那为什么需要LongAdder呢?理由很简单,为了效率。AtomicLong是对整个数进行cas,那么当多个线程并发执行increment操作时,注定只有一个线程成功,其他线程都在失败自旋,很浪费cpu资源,LongAdder你原创 2021-05-18 22:03:25 · 808 阅读 · 3 评论 -
多线程面试题——两个线程交替打印
多线程面试题——两个线程交替打印//一个线程打印1 2 3 ...//一个线程打印a b c ...//交替打印 1 a 2 b 3 c ... 直到所有字母打印完毕public class Thread1 { private static int index = 1; private static Object o = new Object(); publi...原创 2020-01-06 17:45:48 · 2111 阅读 · 2 评论 -
IO多路复用之epoll模型
文章目录IO多路复用之epoll模型epoll简介epoll apiepoll入门案例epoll的ET与LTepoll ET高并发服务器IO多路复用之epoll模型epoll简介基于select和poll轮询方式的低效性,epoll为了解决这个不足,应运而生,epoll可以告诉服务器到底是哪些事件就绪了,epoll返回一个事件集合数组,告诉我们是前多少个事件就绪了,这样我们只需要遍历就绪事件...原创 2019-08-17 17:07:56 · 524 阅读 · 0 评论 -
IO多路复用之poll模型
文章目录IO多路复用之poll模型前言poll实例IO多路复用之poll模型前言由于本文需要一定基础,当然,吃c语言饭的人除外,如果你是java出身的,请先看我上一篇博客selectpollio从最开始的bio发展到nio,aio,再到优秀的网络框架mina,netty,都是基于io底层模型从最开始的select到poll再到epoll的一步步优化。最开始的bio式编程,我们需要为每一...原创 2019-08-17 10:55:56 · 490 阅读 · 0 评论 -
IO多路复用之select模型
文章目录IO多路复用之select模型前言select模型select例子select服务端客户端select深度剖析select函数fd_set位图IO多路复用之select模型前言最近一段时间在研究redis,才发现自己基础不牢靠,所以最近一直在学习网络原理及c语言socket方面的知识,在此推荐前一段时间写的网络原理,虽然不太好,但是作为网络原理入个门是绰绰有余了,redis每秒的读写...原创 2019-08-16 15:40:01 · 932 阅读 · 1 评论 -
c语言多线程并发服务器
文章目录c语言多线程并发服务器服务端客户端c语言多线程并发服务器服务端#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<string.h>#in...原创 2019-08-15 16:38:30 · 4273 阅读 · 0 评论 -
c语言多进程并发服务器
文章目录c语言多进程并发服务器服务端客户端c语言多进程并发服务器服务端#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<arpa/inet.h>#include<string.h>#in...原创 2019-08-15 16:35:20 · 1829 阅读 · 0 评论 -
C语言第一个socket案例
服务端#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<netinet/in.h>#include<sys/socket.h>#include<...原创 2019-08-14 18:02:24 · 355 阅读 · 0 评论 -
Timer详解
文章目录timer介绍:timer的使用:timer源码分析:生产者代码消费者代码timer的schedule和scheduleAtFixedRate区别:timer的缺点:timer的替代产品:timer介绍:Timer是Josh Bloch在jdk1.3发布的一个新的api,主要用于做定时任务.timer的使用:1:schedule(TimerTask task, long delay...原创 2019-07-03 12:16:35 · 5170 阅读 · 0 评论 -
java线程底层源码学习
java线程底层源码学习用了这么久的线程,都不知道底层到底怎么实现的,觉得有必要花时间研究一下。c语言线程例子这是一段c代码,mutexLock使两个线程交替执行。#include<stdio.h>#include<pthread.h>void* run(void* args){ while(1){ usleep(1000); printf("sub...原创 2019-07-05 15:08:18 · 612 阅读 · 0 评论 -
由JAVA对象布局到锁的原理
文章目录由JAVA对象布局到锁的原理前言对象的内存布局对象头 ObjectHeader(12Byte)实例数据对齐填充测试对象内存布局轻量级锁与偏向锁的性能对比重量级锁的性能计算hash后不可偏向由JAVA对象布局到锁的原理前言本文基于64位虚拟机做测试对象的内存布局hotspot的虚拟机中,对象的内存布局包括三个部分,对象头,实例数据,对齐填充对象头 ObjectHeader(12B...原创 2019-07-16 18:06:35 · 481 阅读 · 0 评论 -
死磕JUC之读写锁
文章目录死磕JUC之读写锁(一)读写锁是什么?为什么要有读写锁?读写获取锁的情况读写状态的设计写锁获取写锁释放写锁读锁读锁获取读锁释放锁降级死磕JUC之读写锁(一)读写锁是什么?为什么要有读写锁?java5引入了一系列并发包,其中也包括读写锁,顾名思义,这个工具就是为了应对读与写这两个不同情况而生产的。很容易想到读的情况是共享的,大家一起读,不会影响各自。而写的时候则必须是独占的,否则就会...原创 2019-08-03 15:38:01 · 642 阅读 · 0 评论 -
线程池原理剖析一
线程池原理剖析一线程池的好处1:复用线程,降低线程创建销毁导致的资源浪费。2:提高系统响应速度,任务到达时,不需要等待创建线程。3:提高线程的可管理性。线程池的提交策略向池中提交一个任务的大致流程如下:1:判断核心线程池的线程是否已满。如果不是则创建一个工作线程执行该任务(需获取全局锁)。如果已满则进2.2:判断任务队列是否已满,如果未满,则把当前任务存入队列,如果队列已满,则进3...原创 2019-07-06 16:20:52 · 384 阅读 · 0 评论 -
线程池原理剖析二
文章目录线程池原理剖析二系列回顾ThreadPoolExecutor部分注释翻译静态变量分析线程池原理剖析二系列回顾在上一篇只说了线程池的基本策略和一个案例,可以参考看看线程池原理剖析一ThreadPoolExecutor部分注释翻译 ctl是线程池的一个控制状态量(AtomicInteger),他打包了两个变量,一个是workerCount,另一个runState 1:The ma...原创 2019-07-08 12:13:50 · 349 阅读 · 0 评论 -
CAS自定义锁及模拟高并发测试
CAS自定义锁及模拟高并发测试文章简介本文主要介绍CAS实现自定义独占锁,及模拟高并发测试检测独占锁是否线程安全。本文更偏向于后者。独占锁CAS+BQ+LockSupport就可以完成,这里不是重点,重点是测试。public class ExclusiveLock { AtomicReference<Thread> sign = new AtomicReference...原创 2019-06-20 11:24:36 · 568 阅读 · 1 评论 -
死磕JUC之AQS
AQS目录AQS简介FIFO队列NODE节点独占模式共享模式ConditionObjectAQS简介 AQS是Concurrent包核心之一,全称是AbstractQueuedSynchronizer。ReetrantLock,Semaphore,CountDownLatch都有一个内部类Sync继承AQS。 AQS的核心是通过一个共享变量state来同...原创 2019-04-14 12:49:54 · 598 阅读 · 0 评论