随笔分类 -  Java多线程

摘要:1 定义 1.1 基本的ABA问题 在CAS算法中,需要取出内存中某时刻的数据(由用户完成),在下一时刻比较并替换(由CPU完成,该操作是原子的)。这个时间差中,会导致数据的变化。 假设如下事件序列: 线程 1 从内存位置V中取出A。 线程 2 从位置V中取出A。 线程 2 进行了一些操作,将B写入 阅读全文
posted @ 2020-03-15 22:42 sunleejon 阅读(364) 评论(0) 推荐(0)
摘要:本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助。 什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清 阅读全文
posted @ 2020-03-15 22:21 sunleejon 阅读(170) 评论(0) 推荐(0)
摘要:首先来说下synchronize和Lock的区别: 两者都是锁,用来控制并发冲突,区别在于Lock是个接口,提供的功能更加丰富,除了这个外,他们还有如下区别: synchronize自动释放锁,而Lock必须手动释放,并且代码中出现异常会导致unlock代码不执行,所以Lock一般在Finally中 阅读全文
posted @ 2020-03-15 21:14 sunleejon 阅读(472) 评论(0) 推荐(0)
摘要:volatile的用法 volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。 volatile的用法比较简单,只需要在声明一个可能被多 阅读全文
posted @ 2020-03-15 19:32 sunleejon 阅读(1009) 评论(0) 推荐(0)
摘要:我们在工作中或多或少都使用过线程池。但是为什么要使用线程池呢?从它的名称中我们就可以猜到,线程池是使用了一种池化技术(Pooling Technology)。和很多其他池化技术一样,都是为了更高效的利用资源,例如连接池,内存池等。 数据库连接是一种很昂贵的资源,创建和销毁都需要付出高昂的代价。为了避 阅读全文
posted @ 2020-03-14 23:01 sunleejon 阅读(4394) 评论(0) 推荐(0)
摘要:threadlocal而是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据,官方解释如下。 大致意思就是ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应 阅读全文
posted @ 2020-03-14 17:04 sunleejon 阅读(577) 评论(0) 推荐(0)
摘要:```java package java.util.concurrent; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import jav 阅读全文
posted @ 2020-03-14 15:09 sunleejon 阅读(204) 评论(0) 推荐(0)
摘要:1. 简介 Semaphore 类是一个计数信号量,必须由获取它的线程释放, 通常用于限制可以访问某些资源(物理或逻辑的)线程数目。 一个信号量有且仅有 3 种操作,且它们全部是原子的。 初始化、增加和减少。 增加可以为一个进程解除阻塞。 减少可以让一个进程进入阻塞。 Semaphore 管理一系列 阅读全文
posted @ 2020-03-14 14:37 sunleejon 阅读(207) 评论(0) 推荐(0)
摘要:1. CyclicBarrier 是什么? 从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏障。 它的作用就是会让所有线程都等待完成后才会继续下一步行动。 举个例子,就像生活中我们会约朋友们到某个餐厅一起吃饭,有些朋友可能会早到,有些朋友可能会晚到,但是这个餐 阅读全文
posted @ 2020-03-13 23:41 sunleejon 阅读(209) 评论(0) 推荐(0)
摘要:上述代码中我们先生成了一个CountDownLatch实例。计数数量为10,这表示需要有10个线程来完成任务,等待在CountDownLatch上的线程才能继续执行。latch.countDown();方法作用是通知CountDownLatch有一个线程已经准备完毕,倒计数器可以减一了。latch. 阅读全文
posted @ 2020-03-13 23:14 sunleejon 阅读(145) 评论(0) 推荐(0)