
多线程
world6
这个作者很懒,什么都没留下…
展开
-
深入理解join方法的实现原理
有一道面试题是: 如何控制多线程的执行顺序;线程的代码就不贴了。上伪码好了:main(){thread1.start();thread1.join();thread2.start();thead2.join();thread3.start();}有几个方法都可以做到,这里主要是套路最简单的使用join方法,如何解决。 首先看join方法的API 这是随手百度的 ...原创 2018-03-07 16:33:30 · 3449 阅读 · 0 评论 -
如何控制线程的执行顺序
控制线程的执行顺序有两种办法,通常来说,最简单的就算用Thread类提供的API,使用join方法即可。其使用方法及原理:深入理解join方法的底层原理 还有一个方法就是使用:ExecutorService 这个类提供的方法,看伪码:static ExecutorService executorService = Executors.newSingleThreadExecutor();...原创 2018-03-07 20:53:39 · 1213 阅读 · 0 评论 -
volatile和synchronized 实现原理的差别
提到volatile 和 synchronized 的时候不得不提到的一个东西就是JMM(java Memory Model)java内存模型。因为在并发的过程中 经常要处理一些 可见性 、 原子性 、 有序性的问题。并发编程中的两个关键问题是: 线程之间是 如何通信的。这又分两种情况: 1、共享内存 ——— 隐式通信 volatile 2、 消息传递 ——— 显示通信...原创 2018-03-07 21:47:06 · 2151 阅读 · 0 评论 -
分布式锁的实现方式
分布式锁跟 我们 平时用 的synchronized 锁 本质是都是锁。 不同的是:synchronized是 java提供的锁。 是java进程进行多线程控制时的锁。 用 分布式锁 的原因是,多个应用是不同的进程下运行的,显然用java 提供的 锁就不行了。说说三种分布式锁的机制。 第一种,用数据库来做。有一个 专门的 lock tabl...原创 2018-03-12 20:02:02 · 350 阅读 · 0 评论 -
深入理解 CAS 及 ABA问题
CAS,Compare And Swap,即比较并交换。CAS是Atomic 包的核心,更是整个J.U.C 包的 基石。 本文 将通过AtomicInteger这个类,来分析是如何通过CAS来保证 Atomic的原子性的。直接进入 AtomicInteger 这个类,可以看到AtomicInteger 中定义了一个变量value并且用 valatile来修饰的, 还有个静态...原创 2018-07-23 21:56:16 · 1574 阅读 · 0 评论 -
JUC之 底层核心AQS
AQS,AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWriteLock、Semaphore等) AQS使用一个int类型的成员变量state来表示同步状态,当state>0时表示已经获取了锁,当state = 0时表示释放了锁。它提供了三个方法(getState()、...原创 2018-07-23 21:56:11 · 882 阅读 · 0 评论 -
ReentrantLock 的实现原理
AQS的功能可以分为独占和共享,ReentrantLock实现了独占功能。ReentrantLock实现了Lock接口,加锁和解锁都需要显式写出,注意一定要在适当时候unlock。 ReentrantLock对比synchronized和synchronized相比,ReentrantLock用起来会复杂一些。在基本的加锁和解锁上,两者是一样的,所以无特殊情况下,推荐使用sy...原创 2018-07-23 21:56:03 · 1378 阅读 · 0 评论