![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程
进击的豆子
这个作者很懒,什么都没留下…
展开
-
并发编程第14篇,并发队列框架实战操作
并发队列框架实战操作 用户态与内核态之间的区别 内核态(Kernel Mode):运行操作系统程序,操作硬件Cpu的调度分配、内存、IO操作。 用户态(User Mode):运行用户程序 Synchronized升级重量锁优化过程 Synchronized 锁 默认是为轻量锁,慢慢升级为重量级锁,当如果线程没有获取锁的时候 会被阻塞等待,同时释放cpu执行权,而我们阻塞或者唤醒线程的过程是有系统内核实现的,所以如果Synchronized 升级为重量锁的时候是一个用户...原创 2020-09-07 15:04:43 · 178 阅读 · 0 评论 -
并发编程第13篇,Threadlocal源码解读
Threadlocal源码解读 什么是Threadlocal ThreadLocal提供了线程本地变量,它可以保证访问到的变量属于当前线程,每个线程都保存有一个变量副本,每个线程的变量都不同。ThreadLocal相当于提供了一种线程隔离,将变量与线程相绑定。 Threadloca适用于在多线程的情况下,可以实现传递数据,实现线程隔离。 Threadlocal基本API 1.New Threadlocal();---创建Threadlocal 2.set 设置当前线程绑定的局部变量 ...原创 2020-09-03 17:08:52 · 120 阅读 · 0 评论 -
并发编程第12篇,FutureTask原理
FutureTask原理 使用FutureTask可以返回当前线程的结果。 可以让线程阻塞或者是唤醒 LockSupport与Wait/notify FutureTask简单用法 public class Test001 implements Callable<String> { public static void main(String[] args) throws ExecutionException, InterruptedException { ...原创 2020-09-03 16:09:25 · 169 阅读 · 0 评论 -
并发编程第11篇,线程池的一些常用用法和使用
线程池源码解读 什么是线程池 线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。 为什么要使用线程池 因为频繁的开启线程或者停止,线程需要从新被cpu从就绪到运行状态调度,效率非常低。 所以使用线程可以实现复用,从而提高效率。 线程池的作用 1.降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。 2.提高响应速度:任务到达时,无需等待线程创建即可立即执行。 3.提高线程的可管理性:线程是稀缺资源,如果无限制创建,不仅会消...原创 2020-09-03 15:38:10 · 156 阅读 · 0 评论 -
并发编程第8篇,AQS源码解读
public class AqsLock { public static void main(String[] args) { Lock lock = new ReentrantLock(true); Thread t1 = new Thread("t1"){ @Override public void run() { lock.lock(); Syst.原创 2020-09-02 17:32:09 · 116 阅读 · 0 评论 -
并发编程第10篇,CountDownLatch(计数器)和Semaphore(信号量)
Semaphore信号量底层原理 Semaphore用于限制可以访问某些资源(物理或逻辑的)的线程数目,他维护了一个许可证集合,有多少资源需要限制就维护多少许可证集合,假如这里有N个资源,那就对应于N个许可证,同一时刻也只能有N个线程访问。一个线程获取许可证就调用acquire方法,用完了释放资源就调用release方法。 可以简单理解为Semaphore信号量可以实现对接口限流,底层是基于aqs实现 Semaphore简单用法 Semaphore semaphore = new Sema原创 2020-09-01 10:55:08 · 342 阅读 · 1 评论 -
并发编程第9篇,Condition
Condition private static Lock lock = new ReentrantLock(); private static Condition condition = lock.newCondition(); public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(() -> { lock.lo...原创 2020-08-31 17:02:20 · 93 阅读 · 0 评论 -
并发编程第7篇,AQS一些简单的概念
AQS基本的概念 aqs全称为AbstractQueuedSynchronizer 是一个抽象同步队列,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。 AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实现任何的同步接口,仅仅是定义了同步状态的获取以及释放的方法来提供自定义的同步组件。 AQS底层的实现 结合CAS compareAndSwapInt实现 AQS源码解读 N.原创 2020-08-31 16:19:02 · 153 阅读 · 0 评论 -
并发编程第六篇,lock锁接口和其实现
并发包基本介绍 简单解释一下J.U.C,是JDK中提供的并发工具包,。里面提供了很多并发编程中很常用的实用工具类,比如atomic原子操作、比如lock同步锁、fork/join、CountDownLatch(信号量)、Semaphore (计数器)等。 Lock锁基本的实现 void lock() ---获取锁 如果没有获取到锁则阻塞等待。 void lockInterruptibly --- 和lock一样 但是可以阻塞线程 可以中断 tryLock()---非阻塞式获取锁,如果获取...原创 2020-08-31 15:34:17 · 199 阅读 · 0 评论 -
并发编程第5篇,Synchronized的原理
Synchronized基本特性 1.在普通方法上加上Synchronized锁,则使用this锁 2.在静态同步方法上,则使用当前类的class字节码 3.可以自定义Synchronized锁的对象 相关测试代码 public class Test005 extends Thread { private Object lockObject = new Object(); @Override public void run() { ...原创 2020-08-31 10:47:15 · 159 阅读 · 0 评论 -
并发编程第4篇,锁的分类
锁的分类 悲观锁 悲观锁比较悲观,当多个线程对同一行数据实现修改的时候,最后只有一个线程才能修改成功,只要谁能够对获取该到行锁则其他线程时不能够对该数据做任何修改操作,且是阻塞状态。 比如for update 或者事务开启了事务但是没有提交事务。 select * from information_schema.innodb_trx t select t.trx_mysql_thread_id from information_schema.innodb_trx t kill 768; --清..原创 2020-08-28 14:49:48 · 156 阅读 · 1 评论 -
并发编程第3篇,volatile原理分析
volatile原理分析 什么是 Volatile 能够保证线程可见性,当一个线程修改共享变量时,能够保证对另外一个线程可见性, 但是注意他不能够保证共享变量的原子性问题。 Volatile的特性 可见性 能够保证线程可见性,当一个线程修改共享变量时,能够保证对另外一个线程可见性, 但是注意他不能够保证共享变量的原子性问题。 顺序性 程序执行程序按照代码的先后顺序执行。 原子性 即一个操作或者多个操作 要么全部执行并且执行的过程,要么失败。 Volatile可见性 publ原创 2020-08-27 18:24:39 · 250 阅读 · 0 评论 -
并发编程第二篇,线程之间的通讯
并发和并行的区别 所有的并发处理都有排队等候,唤醒,执行至少三个这样的步骤.所以并发肯定是宏观概念,在微观上他们都是序列被处理的,只不过资源不会在某一个上被阻塞(一般是通过时间片轮转),所以在宏观上看多个几乎同时到达的请求同时在被处理。如果是同一时刻到达的请求也会根据优先级的不同,而先后进入队列排队等候执行。 并发并行是两个既相似而又不相同的概念:并发性,又称共行性,是指能处理多个同时性活动的能力;并行是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行,也亦是说并发事件之间不一定...原创 2020-08-27 11:49:40 · 131 阅读 · 0 评论 -
并发专题第一篇,多线程快速入门和简单介绍
本篇文章主要内容 1.什么是进程、线程 2.多线程有那些好处 3.多线程的应用场景有那些 4.如何理解多线程上下文切换 5.使用多线程存在那些缺陷 6.多线程四种创建的方式 7.如何创建带返回结果的线程 8.多线程综合案例,异步实现发送短信、异步实现记录请求日志 9.多线程五种状态有那些 10.如何优雅的停止一个线程 —————————————————————————————————————————————— 什么是进程 进程就是系统中正在运行的一个程序,程序一旦运行就是一个进程,在一个进程中可..原创 2020-08-27 10:27:47 · 136 阅读 · 0 评论