
JUC
文章平均质量分 83
JUC学习笔记
香树
我们不生产代码,我们只是代码的搬运工
展开
-
JDK 7 ConcurrentHashMap和JDK 8 ConcurrentHashMap
JDK7关于初始化ConcurrentHashMap满老师可能是口误,稍微有点问题,应该是默认的初始化先初始化16个分段锁(segments[16])并且仅在下标为0的位置(segments[0])初始化Segment对象(它有个重要的属性HashEntry数组,初始大小是2)...原创 2022-07-24 13:46:50 · 149 阅读 · 0 评论 -
ThreadPoolExecutor源码分析
提示文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2022-07-23 10:08:17 · 176 阅读 · 0 评论 -
创建线程的方式
那必须找一个类,使其既和Runnable有关系,也和Callable有关系,,,FeatureTask,FeatureTask是Runnable实现类,同时它的构造器可以传Callable,这样就实现了Callable与Runnable的关联。1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值的。Threadl类中的构造器是不能传Callable的,只能传Runnable。...原创 2022-07-15 13:15:26 · 176 阅读 · 0 评论 -
CountdownLatch和CyclicBarrier
CountdownLatch用来进行线程同步协作,等待所有线程完成倒计时。其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来让计数减一 public static void main(String[] args) throws InterruptedException { CountDownLatch latch = new CountDownLatch(3); new Thread(() -> {原创 2022-05-30 11:23:10 · 120 阅读 · 0 评论 -
Semaphore
简单使用基本使用:信号量,用来限制能同时访问共享资源的线程上限,达到限流的效果。示例:public static void main(String[] args) { // 1. 创建 semaphore 对象 Semaphore semaphore = new Semaphore(3); // 2. 10个线程同时运行 for (int i = 0; i < 10; i++) { new Thread(()原创 2022-05-30 11:04:20 · 137 阅读 · 0 评论 -
StampedLock
StampedLock该类自 JDK 8 加入,是为了进一步优化读性能,它的特点是在使用读锁、写锁时都必须配合【戳】使用加解读锁long stamp = lock.readLock();lock.unlockRead(stamp);加解写锁long stamp = lock.writeLock();lock.unlockWrite(stamp);乐观读,StampedLock 支持 tryOptimisticRead() 方法(乐观读),读取完毕后需要做一次 戳校验 如果校验通过,表示这原创 2022-05-29 22:38:46 · 100 阅读 · 0 评论 -
详解ThreadLocal
ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能够保证各个线程的变量独立于其他线程的变量。ThreadLocal实例通常来说都是private static 类型的,用来关联线程和应用上下文。我们可以得知ThreadLocal的作用是:提供线程内的局部变量,不同的线程之间不会互相干扰,这种变量在线程的周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量传递的复杂度线程并发:在多线程并发场景下。原创 2022-05-29 13:28:06 · 90 阅读 · 0 评论 -
带你一行一行代码分析ReentrantLock 的原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录AQS原理概述ReentrantLock 原理非公平锁实现原理加锁解锁流程可重入原理可打断原理公平锁的实现的原理条件变量原理AQS原理概述全称是AbstractQueuedStnchronizer,是阻塞式锁和相关同步器工具的框架特点:1、用state属性来表示锁的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁getstate:获取state状态setState:设置state.原创 2022-05-26 22:22:16 · 120 阅读 · 0 评论 -
11、超详细JAVA线程池技术
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言ThreadPoolExecutor线程池状态构造方法newFixedThreadPoolnewCachedThreadPoolnewSingleThreadExecutor提交任务关闭线程池异步模式之工作线程定义j前言上一章我们介绍了如何手写一个线程池,本章我们介绍一下,JDK为我们提供的线程池的实现技术ThreadPoolExecutor线程池状态ThreadPoolExecutor 使用 int 的高 3.原创 2022-05-26 16:28:12 · 139 阅读 · 0 评论 -
10、教你一步一步如何手写一个简单的线程池
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录线程池模型架构,如下图所示图中描绘的是,三个消费线程或者说是核心线程 t1、t2、t3 通过poll方法从阻塞队列中执行任务,主线程不断地往阻塞队列中put任务task,如果核心线程处于忙碌状态,task就放进阻塞队列中我们用代码实现一个简单线程池步骤1:自定义拒绝策略接口@FunctionalInterface // 拒绝策略interface RejectPolicy<T> { void reje.原创 2022-05-25 23:18:37 · 834 阅读 · 1 评论 -
9 、不可变性和享元模式以及final的原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言日期转换的问题不可变设计享元模式包装类String串池BIgDecimal和BigIntegerfinal原理设置final原理获取final前言本篇博客主要内容是关于JDK中不可变类的使用、设计以及无状态类设计,不可变类和无状态类能够保证我们类的线程安全性,同时介绍了享元模式,不可变类的设计都是要关联享元模式的,享元模式能够有效地节省内存,基于享元模式,我们实现一个简单的自定义数据库连接池的设计。日期转换的问题问.原创 2022-05-25 18:14:39 · 166 阅读 · 0 评论 -
8、无锁并发——cas与volatile、原子整数、原子引用、原子累加器、unsafe类
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录小案例问题提出为什么不安全解决思路-锁解决思路-无锁CAS 与 volatilevolatile为什么无锁效率高原子整数ABA 问题及解决ABA 问题AtomicStampedReference和AtomicMarkableReference原子数组字段更新器原子累加器源码之 LongAddercas 锁原理之伪共享Unsafe概述Unsafe CAS 操作小案例问题提出有如下需求,保证 account.withdraw .原创 2022-05-25 11:54:41 · 107 阅读 · 0 评论 -
7、共享模型之内存(可见性、原子性、有序性;volatie原理以及使用案例、happens-before)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言Java 内存模型可见性退不出的循环解决方法可见性和原子性用volatile实现我们之前说的两阶段终止模式同步模式 Balking有序性鱼罐头的故事诡异的结果解决方法volatile原理如何保证可见性如何保证有序性doubled-checked locking 问题doubled-checked locking 解决happens-before习题balking 模式习题线程安全单例习题前言之前讲解的 Monitor 主.原创 2022-05-24 23:09:18 · 139 阅读 · 0 评论 -
6、Park & Unpark、线程转换状态、ReentrantLock、同步模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录Park & Unpark基本使用特点park和unpark原理线程转换状态死锁哲学家就餐问题活锁饥饿ReentrantLock可重入可打断锁超时立刻失败-tryLock()超时失败使用 tryLock 解决哲学家就餐问题公平锁条件变量同步模式之顺序控制wait notify版ReentrantLockpark unpark版线程同步之交替输出wait notify版ReentrantLockpark unparkP.原创 2022-05-24 16:28:45 · 234 阅读 · 0 评论 -
5、设计模式——同步模式之保护性暂停、join的原理、异步模式之生产者消费者模式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言保护性暂停的定义简单实现增加超时等待join的原理扩展——保护性暂停模式的应用异步模式之生产者消费者模式前言上一章https://blog.youkuaiyun.com/m0_45364328/article/details/124936454我们介绍了wait/notify的原理,为加深理解,我们本章介绍一下,由wait/notify延申出的设计模式保护性暂停的定义用一个线程等待另一个线程的执行结果要点:1、有一个结果.原创 2022-05-24 10:57:58 · 253 阅读 · 0 评论 -
4、wait/notify的原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言小故事wait/notify的原理API介绍Sleep(long n)和wait(long n)的区别:Wait notify的正确使用姿势前言上一章https://blog.youkuaiyun.com/m0_45364328/article/details/124925295我们介绍了synchronized的原理,并提出了Monitor的概念,这张我们介绍一下wait/notify的原理,加深对Monitor的理解小故事.原创 2022-05-23 23:30:35 · 323 阅读 · 0 评论 -
3、synchronized的原理
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言前言上一章https://blog.youkuaiyun.com/m0_45364328/article/details/124919305我们介绍了synchronized的基本用法,以及线程安全性问题,这章我们主要介绍synchronized的原理...原创 2022-05-23 22:00:57 · 149 阅读 · 0 评论 -
2、synchronized的基本用法以及线程安全性分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录共享带来的问题临界区 Critical Section竞态条件 Race Conditionsynchronized 解决方案面向对象改进synchronized加在方法上如果加载普通方法上如果加载静态方法上不加 synchronized 的方法所谓的“线程八锁”变量的线程安全分析共享带来的问题首先看下面这段代码,一个线程对counter 加5000次,另外一个减5000次,预想的是加减抵消,但实际上是这样嘛?@Slf4j.原创 2022-05-23 12:51:17 · 399 阅读 · 0 评论 -
1、Java 线程的基本知识
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录本章内容一、创建和运行线程方法一,直接使用 Thread方法二,使用 Runnable 配合 Thread原理之 Thread 与 Runnable 的关系小结方法三,FutureTask 配合 Thread观察多个线程同时运行二、查看进程线程的方法三、原理之线程运行栈与栈帧五、线程中的方法start()和run()run()start()sleep()和yield()sleep()yield()线程优先级Sleep应用——防止C.原创 2022-05-22 20:17:34 · 170 阅读 · 0 评论