并发编程
文章平均质量分 94
Be_nurturing
这个作者很懒,什么都没留下…
展开
-
03并发编程_工具类
Semaphore(信号量)信号量模型还是很简单的,可以简单概括为:一个计数器,一个等待队列,三个方法。在信号量模型里,计数器和等待队列对外是透明的,所以只能通过信号量模型提供的三个方法来访问它们,这三个方法分别是:init()、down() 和 up()。你可以结合下图来形象化地理解。这三个方法详细的语义具体如下所示。init():设置计数器的初始值down():计数器的值减 1;如果此时计数器的值小于 0,则当前线程将被阻塞,否则当前线程可以继续执行。up():计数器的值加 1;原创 2020-08-19 14:45:35 · 149 阅读 · 0 评论 -
07并发编程_AQS
什么是AQS? AQS,即AbstractQueuedSynchronizer, 队列同步器,它是Java并发用来构建锁和其他同步组件的基础框架。AQS使用方式和其中的设计模式继承、模板方法设计模式了解其用法模板方法独占式获取锁 acquire acquireInterruptily tryAcquireNanos共享式获取锁 acquireShared ...原创 2020-08-18 10:43:43 · 128 阅读 · 0 评论 -
06并发编程_显示锁
显示锁Lock接口和核心方法lock() 加锁操作unlock() 解锁操作tryLock()加锁就需要解锁,写代码一定要在finally中记得解锁public class LockDemo { private Lock lock = new ReentrantLock(); private int count ; public void increntCountByLock(){ lock.lock(); try{ .原创 2020-08-18 10:28:21 · 128 阅读 · 0 评论 -
04并发编程_DCL
单例模式模式是脱离语言的。问题的由来:为什么?多个线程操作不同实例对象。多个线程要操作同一对象,要保证对象的唯一性解决的问题:实例化过程中只实例化一次解决的思路有一个实例化的过程(只有一次),产生实例化对象 new 提供返回实例对象的方法 getInstace()单例模式的分类1.饿汉式线程安全:在类加载时候已经被实例化一次,所以只有这一次,线程安全懒加载:没有延迟加载,如果好长时间不使用,影响性能public class HungerySi...原创 2020-08-13 09:04:31 · 134 阅读 · 0 评论 -
05并发编程_CAS
什么是CASCAS (compareAndSwap),中文叫比较交换,一种无锁原子算法。过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做两个更新,则当前线程则什么都不做。最后,CAS 返回当前V的真实值。CAS 操作时抱着乐观的态度进行的,它总是认为自己可以成功完成操作。CAS的全称为Compare And Swap,直译就是比较交换。是一条CPU的原子指令,其作原创 2020-08-18 09:57:56 · 152 阅读 · 0 评论 -
00并发编程_线程基础和线程之间的共享和协作
本文转载自:https://www.jianshu.com/p/959cf355b574一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的"摩尔定律",可能会奇怪明明讨论的是并发编程转载 2020-08-26 15:30:19 · 111 阅读 · 0 评论 -
01并发编程_JMM模型
Java内存模型1基本概念:程序:代码,完成某一件任务,代码序列(静态的概念)进程:程序在某些数据上的一次运行(动态的概念)线程:一个进程可能包含一个或多个线程(占有资源的独立单元)2 JVM与线程JVM什么时候启动?类被调用 JVM线程---》其他的线程执行(main)线程在JVM中3 JVM内存区域方法区:类信息、常量、static 、JIT(及时编译)(信息共享)Java堆区:实例对象 GC (信息共享) (OOM内存溢出)VM...原创 2020-08-03 21:47:01 · 222 阅读 · 0 评论