![](https://img-blog.csdnimg.cn/20200804134325688.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
并发编程
文章平均质量分 94
并发编程
ooyhao
一起学习,一起进步
展开
-
【AQS】ReentrantLock可重入锁源码解析
AbstractQueuedSynchronizerAQS全程为 AbstractQueuedSynchronizer、抽象队列同步器。是j.u.c包下的一个抽象类,同时也是juc下并发同步工具的基础。像ReentrantLock,Semaphore,CountDownLatch都是基于AQS实现的。CASCAS全程为 Compare And Set 或 Compare And Swap。即比较并交换。是AQS实现的基础。CAS在实现的时候,有三个值。一个是内存值 V,一个是期望值E,一个是更新值 U原创 2021-09-11 15:08:12 · 231 阅读 · 0 评论 -
并发编程之 Semaphore信号量
Semaphore信号量。允许多个线程同时访问。信号量为多线程写作提供了更加强大的控制方法。从广义上将,信号量是对锁的扩展。无论内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问同一个资源,而信号量却可以指定多个线程,同时访问某一资源。信号量主要提供了一下构造方法:public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits,原创 2020-08-02 14:51:12 · 344 阅读 · 0 评论 -
并发编程之 CountDownLatch &CyclicBarrier & Exchanger
CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数初始化CountDownLatch。由于调用了countDown()方法,所以在当计数器到达零之前,await方法会一直处于阻塞状态。之后,会释放所有等待的线程,await的所有后续调用都将立即返回。这种现象只出现一次—计数无法被重置。package org.example.juc.CountDownLatch;import java.util.concurrent.Coun原创 2020-08-02 14:50:13 · 227 阅读 · 0 评论 -
并发编程之线程池ThreadPoolExecutor& Executors
线程池线程池的结构上面是线程池的继承结构。首先Excutor 和 ExecutorService 都是接口,而 AbstractExecutorService 是抽象类,均无法实例化,所以我们使用的是 ThreadPoolExecutor 类。ThreadPoolExecutor先看非常重要的全参构造函数/** * Creates a new {@code ThreadPoolExecutor} with the given initial * parameters. * * @para原创 2020-08-02 14:45:36 · 285 阅读 · 0 评论 -
并发编程之Lock
Lock我们先看一张Lock锁的继承结构图:Lock,顾名思义就是锁。这是一个接口,用于控制线程安全的一种方式。public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException; boolean tryLock(); boolean tryLock(long time, TimeUnit unit) throws InterruptedException;原创 2020-08-02 14:41:22 · 254 阅读 · 0 评论 -
并发编程之单例模式,volatile和 synchronized
部分参考:https://www.cnblogs.com/limingluzhu/p/5156659.html单例模式单例模式是众多设计模式中,可以说是最熟悉的了,但是由于单例模式的特殊性,我们需要在任何环境下,获取到的都是同一个实例,下面我们来看看。首先,单例类有一下几个特点。私有化的构造函数(防止外部自行创建实例)私有化的静态全局变量(保存全局唯一实例)公有的静态方法获取单例实例(返回单例实例)众所周知,单例模式分为饿汉式和懒汉式,所谓饿汉式其实就是在类加载的时候,就把单例实例创建.原创 2020-08-02 14:38:43 · 564 阅读 · 0 评论 -
并发编程之死锁
死锁死锁就是两个或以上线程互相争抢对方资源,导致没有任何一个线程能获得所需所有资源的一种僵持状态。死锁下的线程是 BLOCKED 状态。下面我们来使用Synchronized 关键字 造一个死锁。ServiceOne类:public class ServiceOne { private ServiceTwo serviceTwo; private final Object LOCK_ONE = new Object(); public void setServiceTwo(原创 2020-08-02 14:32:35 · 417 阅读 · 0 评论 -
并发编程之线程和线程组
线程Thread如何创建线程创建线程的两种方式:这里其实需要注意,说是说创建线程可以通过继承Thread和实现Runnable接口来创建,我们先看看一下。1.继承Thread类,并重写run方法class IThread extends Thread { @Override public void run() { super.run(); }}IThread thread = new IThread();thread.start();2.实现Run原创 2020-08-02 14:28:32 · 477 阅读 · 0 评论 -
并发编程之多线程基础知识
概念整理在学习多线程之前,我们需要知道什么是线程,当然也少不了需要知道什么是进程。这里仅仅是放两句比较简单的话,有个印象就行,毕竟线程和进程的概念网上一大堆,记大多其实也没啥用。但是呢,面试的时候又喜欢问一些概念性的东西,所以这里还是需要把比较重要的概念记录一下。进程和线程进程:运行中的程序,是资源分配的最小单位。进程相当于是一个容器,里面可以包含许多线程。线程:是CPU调度的最小单位,线程相当于轻量级的进程。知道了进程和线程的概念之后,我们在看一下什么是并发,什么是并行。并行和并发并原创 2020-08-02 10:23:10 · 162 阅读 · 0 评论