![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 86
并发编程
老王_lw
这个作者很懒,什么都没留下…
展开
-
6、并发安全
类的线程安全定义,怎么才能做到类的线程安全? 栈封闭 变量在方法内部申明;这些变量都处于栈封闭;栈是线程私有的(安全); 无状态 类内部无任何成员变量; 让类不可变 让状态不可变 所有包装类都不可变 ; 1、对于一个类来讲,所有的成员变量应该是私有的,同样的只要有可能, 所有的成员变量应该加 final 关键字; 2、不提供任何可修改成员变量的方法,同时,成员变量也不做为方法的返回值; Akka 框架 volatile 保证类的可见性;最适合一个线程写,多个线程读的情景;( ConcurrentH原创 2021-02-05 16:18:07 · 159 阅读 · 0 评论 -
5、线程池
什么是线程池?为什么要使用线程池? 1、降低资源的消耗,降低线程创建和销毁的资源消耗 2、提高响应速度,避免创建销毁消耗时间; 3、提高线程的可管理性 实现一个我们自己的线程池 1、线程必须在池子已经创建好,并且可以保持住,要有容器保存多个线程 2、线程还能接受外部的任务并且运行; JDK中的线程池和工作原理 ThreadPoolExecutor ,jdk所有线程池实现的父类 各个参数的含义 int corePoolSize, 核心线程数, < corePoo原创 2021-02-03 21:31:32 · 88 阅读 · 0 评论 -
3、显示锁和AQS
3、显示锁和AQS 原子操作CAS atom(不可分割) 什么是原子操作?如何实现原子操作? synchronized 基于阻塞的锁机制 可以实现,但会引发以下问题 1、被阻塞的线程优先级很高 2、拿到锁的线程一直不释放锁怎么办? 3、大量的竞争,消耗CPU,同时带来死锁或者其他安全问题。 CAS的原理 利用了现代处理器都支持的CAS指令,循环这个指令,直到成功为止; CAS(Compare And Swap),指令级别保证这是一个原子操作; 三个运算符: 一个内存地址 V 、 一个期望值 A原创 2021-01-12 12:01:01 · 93 阅读 · 0 评论 -
4、并发容器
ConcurrentHashMap Hash 散列,哈希:把任意长度的输入通过一种算法(散列),变换成固定长度的输出,这个输出值就是散列值;属于压缩映射,容易产生哈希冲突; 常见算法 直接取余, md4、md5、sha 哈希算法,摘要 冲突解决办法: 开放寻址 再散列 链地址法 HashMap线程为什么不安全 put操作会引起死循环,hashMap里的entry链表产生环形的数据结构,entry的next 永远不为null; https://www.cnblogs.com/wfq9330/p/9原创 2020-10-10 17:06:11 · 174 阅读 · 0 评论 -
2、线程的并发工具类
线程间协作 轮询:难以保证及时性;资源开销大 等待和通知 wait(); notify();/ notifyAll(); 对象上的方法 等待和通知的标准范式 等待方: 1、获取对象的锁; 2、循环里判断条件是否满足,不满足调用 wait 方法; 3、条件满足执行业务逻辑; 通知方: 1、获取对象的锁; 2、改变条件; 3、通知所有等待在对象的线程; 等待超时模式实现一个连接池 假设 等待时间时长为 T ,当前时间 now + T 以后超时 long overtime = now + T ; long r原创 2020-08-31 17:48:11 · 135 阅读 · 0 评论 -
1、线程基础、线程之间的共享和协作
基础概念: cpu核心数 和 线程数的关系: 1:1;超线程技术 - > 1:2 cpu时间片轮转机制: rr调度,上下文切换 什么是进程和线程: 进程:程序运行资源分配的最小单位,进程内部有多个线程,多个线程共享这个进程的资源; 线程:CPU调度的最小单位, 澄清并行和并发: 并发:与时间单位相关;单位时间内可以处理事情的能力; 并行:同一时刻,可以处理事情的能力; 高并发编程的意义,好处和注意事项: 意义 1、可以充分利用CPU 的资源; 2、加快用户...原创 2020-08-26 17:34:46 · 132 阅读 · 0 评论