java并发
文章平均质量分 94
阿大0119
这个作者很懒,什么都没留下…
展开
-
java并发之并发容器
并发容器ConcurrentHashMapCopyOnWriteArrayListConcurrentLinkedQueueBlockingQueueConcurrentHashMap这个之前的博客讲过了,可以去看之前的博客CopyOnWriteArrayList简介public class CopyOnWriteArrayList<E>extends Objectimplements List<E>, RandomAccess, Cloneable, Serializ原创 2021-07-22 12:44:08 · 67 阅读 · 0 评论 -
java并发之一些AQS锁
关于AQS和ReentrantLock可以看我的前几篇文章AQS锁的一些实现StampedLock**Semaphore**CountDownLatchCyclicBarrier**CyclicBarrier 和 CountDownLatch 的区别**StampedLock为了进一步优化读写锁,也就是在ReentrantReadWriteLock上有更好的读的性能,StampedLock加入了【戳】这种东东,类似于CAS乐观锁的操作。StampedLock支持乐观读方法,读取完毕后需要做一次戳检验原创 2021-07-22 12:40:26 · 144 阅读 · 0 评论 -
java并发之ReentrantReadWriteLock
部分资料来自网络,有版权问题联系我删除ReentrantReadWriteLockJAVA的并发包提供了读写锁ReentrantReadWriteLock,它表示两个锁,一个是读操作相关的锁,称为共享锁;一个是写相关的锁,称为排他锁,描述如下:线程进入读锁的前提条件:没有其他线程的写锁,没有写请求或者有写请求,但调用线程和持有锁的线程是同一个。线程进入写锁的前提条件:没有其他线程的读锁没有其他线程的写锁而读写锁有以下三个重要的特性:(1)公平选择性:支持非公平(原创 2021-07-22 12:36:03 · 70 阅读 · 0 评论 -
java并发之ReentrantLock
部分资料来自网络,如有版权问题请联系我删除关于AQS的源码解读,可以看我的另一篇博客ReentrantLock可重入公平锁和非公平锁Condition可重入对公平锁和非公平锁都是类似的,这里以默认的非公平锁为例// 在ReentrantLock中acquires都是1final boolean nonfairTryAcquire(int acquires) { final Thread current = Thread.currentThread(); int c = getSt原创 2021-07-21 15:15:58 · 232 阅读 · 0 评论 -
java并发之AQS
部分资料来自网络,如有版权问题请联系我删除AQS原理自定义一个AQS锁源码独占式获取同步状态acquire(int)释放同步资源release()共享式获取同步状态--acquireShared**释放同步状态--releaseShared**AQS 的全称为(AbstractQueuedSynchronizer)AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 Reentran原创 2021-07-21 14:24:36 · 109 阅读 · 0 评论 -
java并发之线程池
线程池Executor框架简介框架结构框架的使用ThreadPoolExecutor类(重要)常见对比几种常见的线程池FixedThreadPoolSingleThreadExecutorCachedThreadPoolScheduledThreadPoolExecutor线程池大小的确定线程池提供了一种限制和管理资源(包括执行一个任务)。 每个线程池还维护一些基本统计信息,例如已完成任务的数量。使用线程池的好处:**降低资源消耗。**通过重复利用已创建的线程降低线程创建和销毁造成的消耗。**提高原创 2021-07-21 13:10:16 · 219 阅读 · 0 评论 -
java并发之ThreadLocal
部分内容来自黑马和javaguide,有版权问题请联系我ThreadLocal数据结构内存泄漏Hash算法ThreadLocal对象可以提供线程局部变量,每个线程Thread拥有一份自己的副本变量,多个线程互不干扰。数据结构Thread类有一个类型为ThreadLocal.ThreadLocalMap的实例变量threadLocals,也就是说每个线程有一个自己的ThreadLocalMap。ThreadLocalMap有自己的独立实现,可以简单地将它的key视作ThreadLocal,value原创 2021-07-21 12:20:51 · 144 阅读 · 0 评论 -
java并发之Volatile和Final
部分内容来自网络,如有版权问题请联系文章目录Volatile(易变)内存语义保证可见性与有序性synchronized和 volatileHappens-beforefinal内存语义Volatile(易变)首先介绍一下指令重排序:java内存模型允许编译器和处理器对指令重排序以提高运行性能,并且只会对不存在数据依赖性的指令重排序。内存语义当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。当读一个 volatile 变量时,JMM 会把该线程对应的原创 2021-07-20 22:20:30 · 416 阅读 · 0 评论 -
java并发之Synchronized
本片文章部分内容来自黑马、javaguide还有一些博客,如果有版权问题请联系我文章目录底层Monitorjava对象头Monitor锁膨胀偏向锁轻量级锁重量级锁其他一些优化自旋锁适应性自旋锁锁消除锁粗化底层MonitorJVM基于进入和退出Monitor对象来实现方法同步和代码块同步, 但是两者的实现细节不一样.代码块同步: 通过使用monitorenter和monitorexit指令实现的.package com.paddx.test.concurrent;public class Sync原创 2021-07-20 21:34:12 · 300 阅读 · 0 评论 -
java并发之基础
部分来自黑马和javaguide文章目录线程与进程线程生命周期上下文切换死锁sleep、wait、yieldjoinpark、unparkstart和run两阶段终止CAS线程与进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。线程与进程相似,但线程是一个比进程更小的执行单位原创 2021-07-20 17:56:01 · 90 阅读 · 0 评论 -
java容器之ConcurrentHashMap
此篇文章部分来自javaguide和黑马的并发教程,算是学习笔记吧,参考博客:https://blog.csdn.net/thqtzq/article/details/90344082文章目录JDK1.7底层数据结构初始化put扩容 rehashgetsizeJDK1.8初始化 initTableputgetsize总结JDK1.7底层数据结构如上图思想主要是将数据存到一个Segment数组中,而且每个Segment数组均继承自ReentrantLock,即数组中的每个元素都可以加锁,每当需要修改原创 2021-07-20 14:07:18 · 91 阅读 · 0 评论