• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






lalala

 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

随笔分类 -  Java并发编程

 
线程安全集合类 —— ConcurrentHashMap
摘要:线程安全集合类概述 线程安全集合类可以分为三大类: 遗留的线程安全集合如 Hashtable , Vector 使用 Collections 装饰的线程安全集合(每个方法都加上了 sychronized,性能不是很高),如: Collections.synchronizedCollection Co 阅读全文
posted @ 2023-09-26 00:04 archaique 阅读(181) 评论(0) 推荐(0)
ReentrantLock
摘要:ReentrantLock 相对于 synchronized 它具备如下特点 可打断 可以设置超时时间 可以设置为公平锁 支持多个条件变量 与 synchronized 一样,都支持可重入 基本用法 // 获取锁 reentrantLock.lock(); try { // 临界区 } finall 阅读全文
posted @ 2023-09-11 00:44 archaique 阅读(70) 评论(0) 推荐(0)
七、J.U.C
摘要:AQS 全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架 特点: 用 state 属性来表示可用资源数(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁 getState - 获取 state 状态 setState - 设 阅读全文
posted @ 2023-09-10 16:13 archaique 阅读(68) 评论(0) 推荐(0)
六、线程池
摘要:自定义线程池 步骤1:自定义阻塞队列 class BlockingQueue<T> { // 1. 任务队列,双向链表 private Deque<T> queue = new ArrayDeque<>(); // 2. 锁 private ReentrantLock lock = new Reen 阅读全文
posted @ 2023-09-04 23:29 archaique 阅读(35) 评论(0) 推荐(0)
五、共享模型之不可变
摘要:日期转换的问题 问题提出 下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); for (int i = 0; i < 10; i++) { new Threa 阅读全文
posted @ 2023-09-02 23:22 archaique 阅读(23) 评论(0) 推荐(0)
四、共享模型之无锁
摘要:CAS 有一个共享变量余额,多线程调用减余额方法 withdraw 减少这个共享的余额变量 balance 方法内会启动 1000 个线程,每个线程做 -10 元 的操作 * 如果初始余额为 10000 那么正确的结果应当是 0。结果却大于 0 加锁解决 class AccountUnsafe im 阅读全文
posted @ 2023-09-02 21:24 archaique 阅读(41) 评论(0) 推荐(0)
三、共享模型之内存
摘要:一 volatile 主内存:所有的变量都存储在主内存。线程间变量值的传递均需要通过主内存来完成。 线程的工作内存:保存了被该线程使用的变量的主内存副本。线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的数据。不同的线程之间也无法直接访问对方工作内存中的变量。线程间 阅读全文
posted @ 2023-08-29 23:53 archaique 阅读(38) 评论(0) 推荐(0)
并发编程 - 模式与应用
摘要:限制 1、限制对 CPU 的使用 单核 CPU 下,while (true) 里如果什么都不干, CPU 会空转占用会很快达到 100% 。这时 while(true) 里哪怕用 sleep(1) 也会大幅降低 cpu 占用 sleep 实现 while(true) { try { Thread.s 阅读全文
posted @ 2023-08-07 22:57 archaique 阅读(82) 评论(0) 推荐(0)
sychronized 原理,锁升级优化
摘要:Java 对象头 以 32 位虚拟机为例 普通对象 所以以 Integer 和 int 为例子 Integer 8字节对象头 + 4字节 int 值,所以大小是 int 的 3 倍 int 4字节 int 值 数组对象 如 Student[] s = new Student[8],还包括数组长度 l 阅读全文
posted @ 2023-07-31 23:22 archaique 阅读(91) 评论(0) 推荐(0)
二、共享模型之管程
摘要:共享带来的问题 两个线程对初始值为 0 的静态变量一个做自增,一个做自减,各做 5000 次,结果是 0 吗? static int counter = 0; public static void main(String[] args) throws InterruptedException { T 阅读全文
posted @ 2023-07-16 17:06 archaique 阅读(30) 评论(0) 推荐(0)
ThreadLocal
摘要:参考: java guide : https://javaguide.cn/java/concurrent/java-concurrent-questions-03.html 阿里云开发者社区:https://developer.aliyun.com/article/1180633 Dongguab 阅读全文
posted @ 2023-07-12 16:48 archaique 阅读(23) 评论(0) 推荐(0)
一、Java 线程
摘要:创建和运行线程 方法一:继承 Thread,重写 run() 方法 实际上是用 匿名内部类 实现了一个 Thread 的子类,override run() 方法 start() 让线程 runable,即让操作系统可以给它分配时间片 // 创建线程对象 Thread t = new Thread() 阅读全文
posted @ 2023-05-28 22:23 archaique 阅读(40) 评论(0) 推荐(0)
HashMap
摘要:元素在数组中的位置由key.hashCode()的值决定,如果两个key的哈希值相等,即发生了哈希碰撞,用链地址法解决 Hash 碰撞 当然这张图中没有体现出来的有两点: 为了提升整个HashMap的读取效率,当 HashMap 中的元素个数超过 数组大小*负载因子 时 扩容,以减小哈希碰撞。 在  阅读全文
posted @ 2023-03-29 16:10 archaique 阅读(48) 评论(0) 推荐(0)