多线程
文章平均质量分 79
weixin_39477597
这个作者很懒,什么都没留下…
展开
-
AQS(AbstractQueuedSynchronized)
AQS全称 AbstractQueuedSynchronized一、Semaphore 和 AQS的关系Semaphore、CountDownLatch等内部有一个Sync类,Sync类继承了AQS二、AQS的作用AQS是一个用于构建锁,同步器,协作工具类的工具类,有了AQS以后,构建线程协作类就容易多了三、AQS内部原理解析AQS最核心的三大部分state控制线程抢锁和配合的FIFO队列期望协作工具类去实现的获取/释放等重要方法statestate的具体含义原创 2021-12-25 12:44:46 · 462 阅读 · 0 评论 -
Future 和 Callable
Runnable 缺陷不能返回一个返回值不能抛出 checked ExecptionCallable接口类似于Runnable,被其他线程执行的任务实现call方法有返回值Future类Future的作用Callable和Future关系可以用通过Future.get来获取Callable接口返回的执行结果,还可以通过Future.isDone()来判断任务是否已经执行完了,以及取消这个任务,限时获取任务的结果等。在call()为执行完毕之前,调用get()线程(原创 2021-12-25 12:39:51 · 489 阅读 · 0 评论 -
java 控制并发流程工具
1. 什么是控制并发流程控制并发流程工具类,作用就是帮助我们更容易的让线程之间合作 让线程之间相互配合,来满足业务逻辑 例如让线程A等待线程B执行完毕后再至此那个等合作策略原创 2021-12-05 12:47:41 · 405 阅读 · 0 评论 -
java中的并发容器
并发容器概览ConcurrentHashMap:线程安全的HashMapCopyOnWriteArrayList:线程安全的ListBlockingQueue:这是一个接口,表示阻塞队列,非常适合用于作为数据共享的通道ConcurrentLinkedQueue:高效的非阻塞并发队列,使用链表实现。可以看做一个线程安全的LinkedList。ConcurrentSkipList:是一个Map。使用跳表的数据结构进行快速查找。ConcurrentHashMapCopyOnWriteA原创 2021-11-28 13:29:29 · 808 阅读 · 0 评论 -
final关键字和不变性
什么是不变性(Immutable)如果对象在被创建后,状态不能被修改,那么它就是不可变的。 对于不可变的对象(一个对象中所有的属性都被final修饰)是线程安全的,不需要采取额外的措施fianl的作用修饰类防止被继承 修饰方法防止被重写 修饰变量防止被修改 天生是线程安全而不需要额外的同步开销final的3种用法fianl修饰变量被final修饰的变量,意味着值不能被修改,如果变量是对象那么对象的引用不能变但是自身的内容依然可以变化赋值时机如果初始化并不赋值,后续赋值,就原创 2021-11-28 11:13:49 · 367 阅读 · 0 评论 -
java的CAS原理
一、什么是CASCAS的全称是 compare and swap,适用于并发的场景,CAS就是当前线程认为V的值应该是A,如果是的话当前线程就给他改成B,如果不是A(说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错CAS有三个操作数:内存值V,预期值A,要修改的值B,当且仅当预期值A和内存值相同时,才将内存值修改为B,否则什么都不做最后返回现在的V值。二、应用场景乐观锁 并发容器三、原子类是如何利用CASAtomicInteger 加载UnSafe工具,用来直接操作内存原创 2021-11-06 12:12:06 · 118 阅读 · 0 评论 -
Java中的原子类
一、什么是原子类 一个操作是不可中断的,即使是多线程的情况下也可以保证 在java中原子类都被保存在 java.util.concurrent.atomatic二、原子类的作用原子类的作用和锁类似,是为了保证并发情况下线程安全,不过原子类相比于锁,有一定的优势。 粒度更细,原子变量可以把竞争范围缩小到变量级别,这是我们可以获得的最细粒度的情况了,通常锁的粒度都要大于原子变量的粒度。 效率更高,通常使用原子类的效率比使用锁的效率更高,除了高度竞争的情况。三、原子类纵览Atomic*原创 2021-11-06 11:33:05 · 1443 阅读 · 0 评论 -
java 中的锁简介
一、Lock简介锁是一种工具,用于控制对共享资源的访问Lock和Synchronized 它们都可以达到线程安全的目的,但是在使用上和功能上又有较大的不同Lock并不是用来代替Synchronized的,而是当使用Synchronized不合适或不足以满足要求的时候来提供高级功能的Lock 接口最常见的实现类是ReentrantLock通常情况下,Lock值允许一个线程访问这个共享资源。不过有的时候,一些特殊的视线也可允许并发访问,比如ReadWriteLock里面的ReadLock原创 2021-10-30 12:55:44 · 158 阅读 · 0 评论 -
ThreadLocal
一、应用场景每个线程都需要一个独享对象,每个 Thread 内有自己的实例副本,不共享(通常是工具类,典型场景使用的类有SimpleDateFormat 和 Random),可以调用withInitial()方法 每个线程内需要保存全局变量(例如在拦截器中获取用户信息)可以让不同方法直接使用,避免参数传递的麻烦,可以调用set方法二、ThreadLocal 作用让某个需要用到的对象在线程间隔离(两个线程都有自己的独立对象) 在任何方法都可以轻松获取对象三、ThreadLocal 好处达到原创 2021-10-30 09:38:57 · 135 阅读 · 0 评论 -
线程池简介
一、为什么需要创建线程池反复创建线程开销大 过多的线程会占用太多的内存二、线程池的好处加快响应速度 合理利用CPU和内存 统一管理资源三、线程池适合应用的场合 服务器接受到大量请求时,使用线程池技术是非常合适的,它可以大大减少线程的创建和销毁数,提高服务器的工作效率 实际上,在开发中如果需要创建5个以上的线程,那么就可以使用线程池来管理四、创建线程1.线程池构造函数的参数参数名 类型 含义 corePoolSize int ...原创 2021-10-23 11:41:51 · 154 阅读 · 0 评论