![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
文章平均质量分 92
我吃五包辣条
事已至此,何须多言
展开
-
细说java内存模型
记得之前在说volitile的时候,曾经讲到过java内存模型,当时只是提到volitile可以保证变量在不同线程之间的可见性。今天我们就来详细说一下java的内存模型,聊一聊为什么同一个共享变量在不同的线程的值是不同的,以及volitile是如何做到保证共享变量在不同线程之间的其可见性的。 java内存模型的定义 java内存模型描述的是主内存与线程工作内存的关系,它规定了所有的变量存储在...原创 2019-11-03 13:11:02 · 100 阅读 · 0 评论 -
可重入锁的理解与应用
可重入锁 重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影响。synchronized 和 ReentrantLockd都是重入锁 。 首先我们来看一个用synchronized实现的例子,例子如下。 public class Test implements Runnable { public synchronized void get()...原创 2019-07-13 16:37:19 · 302 阅读 · 0 评论 -
浅析Java线程池
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情况下,使用线程池可以很好的提高性能,尤其是当程序中需要创建大量存在周期很短暂的线程时,更应该考虑线程池。 与数据库连接池比较相似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或者Callable对象传递给线程池,线程池就会启动一个线程来执行它们的run方法或者call方法。当run方法或者call方...原创 2019-07-14 21:02:37 · 72 阅读 · 0 评论 -
解决CAS算法的"ABA"漏洞问题
在将如何去解决去解决CAS的ABA问题时,我们先来说一下什么是CAS,CAS全称 compare-and-swap ,CPU并发原语。执行是连续的,不允许被中断,不会造成数据不一致问题。 CAS算法:它包含三个参数CAS(V,E,N): V表示要更新的变量,E表示预期值,N表示新值。仅当V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程做了更新,则当前线程什么都不做。最后...原创 2019-07-15 11:16:36 · 434 阅读 · 0 评论 -
AQS原理简介以及利用AQS简单实现一个共享锁
AQS 指AbstractQueuedSynchronizer类。 AQS是java中管理“锁”的抽象类,锁的许多公共方法都是在这个类中实现。AQS是独占锁(例如,ReentrantLock)和共享锁(例如,Semaphore)的公共父类。AQS也被称为队列同步器,是用来构建锁或者其他同步组件的基础框架。 使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。 ...原创 2019-07-17 10:32:43 · 634 阅读 · 0 评论