并发编程
糖醋豆沙
这个作者很懒,什么都没留下…
展开
-
ConcurrentHashMap
public class ConcurrentHashMap<K,V> extends AbstractMap<K,V> implements ConcurrentMap<K,V>, Serializablejdk1.8中初始容量,扩容要求和HashMap相同COncurrentHashMap中:相较HashMap中,添加了volatile,没...转载 2020-03-19 21:41:21 · 120 阅读 · 0 评论 -
LockSupport
JDK 中的rt.jar 包里面的LockSupport 是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。LockSupport 类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport 类的方法的线程是不持有许可证的。LockSupport 是使用Unsafe 类实现的。public class ParkTest { publi...原创 2020-03-15 14:02:37 · 149 阅读 · 0 评论 -
CopyOnWriteArrayList
public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable原创 2020-03-13 16:59:26 · 261 阅读 · 0 评论 -
jdk8 新增原子操作类----------LongAdder
AtomicLong 通过CAS 提供了非阻塞的原子性操作,相比使用阻塞算法的同步器来说它的性能己经很好了,但是JDK 开发组并不满足于此。使用AtomicLong 时,在高并发下大量线程会同时去竞争更新同→个原子变量,但是由于同时只有一个线程的CAS 操作会成功,这就造成了大量线程竞争失败后,会通过无限循环不断进行自旋尝试CAS 的操作, 而这会白白浪费CPU 资源。因此JDK 8 新增了一...原创 2020-03-12 22:20:23 · 153 阅读 · 0 评论 -
JUC包中原子操作类----AtomicLong
AtomicLong 是原子性递增或者递减类,其内部使用Unsafe 来实现public class AtomicLong extends Number implements java.io.Serializableprivate static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long...原创 2020-03-11 23:19:32 · 309 阅读 · 0 评论 -
CAS
CAS 即Compare and Swap ,其是JDK 提供的非阻塞原子性操作, 它通过硬件保证了比较更新操作的原子性。JDK 里面的Unsafe 类提供了一系列的compareAndSwap *方法CAS 的思想很简单:三个参数,一个当前内存值 V、旧的预期值 A、即将更新的值 B,当且仅当预期值 A 和内存值 V 相同时,将内存值修改为 B 并返回 true,否则什么都不做,并返回 fa...转载 2020-03-11 21:50:51 · 132 阅读 · 0 评论 -
Random & ThreadlocalRandom
总结:每个Random 实例里面都有一个原子性的种子变量用来记录当前的种子值,当要生成新的随机数时需要根据当前种子计算新的种子并更新回原子变量。在多线程下使用单个Random 实例生成随机数时,当多个线程同时计算随机数来计算新的种子时, 多个线程会竞争同一个原子变量的更新操作,由于原子变量的更新是CAS 操作,同时只有一个线程会成功,所以会造成大量线程进行自旋重试, 这会降低并发性能,所以Thre...原创 2020-03-11 16:49:25 · 393 阅读 · 0 评论 -
Synchronized & volatile
synchronized 关键字介绍synchronized 块是Java 提供的一种原子性内置锁, Java 中的每个对象都可以把它当作一个同步锁来使用, 这些Java 内置的使用者看不到的锁被称为内部锁,也叫作监视器锁。线程的执行代码在进入synchronized 代码块前会自动获取内部锁,这时候其他线程访问该同步代码块时会被阻塞挂起。拿到内部锁的线程会在正常退出同步代码块或者抛出异常后或...原创 2020-03-09 22:15:35 · 122 阅读 · 0 评论 -
InheritableThreadLocal
public class InherThreadTest { public static ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) { threadLocal.set("hello worl...原创 2020-03-09 18:58:16 · 189 阅读 · 0 评论 -
ThreadLocal
工作笔记整理:ThreadLocal,业务需求需要每个线程保存一份变量(打印时打印出显示的内容而不是最新的内容),引入了这个概念对于某一ThreadLocal来讲,他的索引值i是确定的,在不同线程之间访问时访问的是不同的table数组的同一位置即都为table[i],只不过这个不同线程之间的table是独立的。 对于同一线程的不同ThreadLocal来讲,这些ThreadLoca...转载 2020-03-08 23:46:49 · 133 阅读 · 0 评论 -
几种多线程实现方式的优缺点
使用继承方式的好处是方便传参,你可以在子类里面添加成员变量,通过set方法设置参数或者通过构造函数进行传递,使用Runnable 方式,则只能使用主线程里面被声明为final 的变量。不好的地方是Java 不支持多继承,如果继承了Thread 类,那么子类不能再继承其他类,而Runable 则没有这个限制。前两种方式都没办法拿到任务的返回结果,但是Futuretask 方式可以。...转载 2020-03-08 16:38:41 · 1378 阅读 · 0 评论