
多线程
程序蛇
这个作者很懒,什么都没留下…
展开
-
AtomicStampedReference源码分析
AtomicStampedReference AtomicStampedReference是j.u.c.atomic包下提供的一个原子类,它能通过维护一个版本号解决其它原子类无法解决的ABA问题。 ABA问题 我们知道CAS操作底层是依赖于Unsafe.compareAndSwap操作实现的,它通过比较源内存地址与更新时期望的内存地址是否相同来决定是否执行更新操作,但如果某线程1在读取了内存地址X...原创 2019-12-19 14:25:40 · 228 阅读 · 0 评论 -
AtomicInteger源码分析
主要属性 //获取Unsafe实例对象, 目的是使用Unsafe.compareAndSwapInt进行update操作 private static final Unsafe unsafe = Unsafe.getUnsafe(); //标识value字段的偏移量 private static final long valueOffset; //初始化: 通...原创 2019-12-19 12:50:30 · 184 阅读 · 0 评论 -
Unsafe源码分析
获取Unsafe实例 @CallerSensitive public static Unsafe getUnsafe() { Class var0 = Reflection.getCallerClass(); //若当前类加载器采用的不是BootStrapClassLoader, 那么就抛出异常 if (!VM.isSystemDomainL...原创 2019-12-18 19:30:40 · 226 阅读 · 0 评论 -
Java多线程基础
在入坑Java多线程之前,先大概了解一下进程和线程的区别。 进程与线程的区别 CPU一次只能运行一个进程,该进程运行期间其他的进程都属于非运行状态。而一个进程又包括了多个线程,该进程的内存也由这些线程共享。 虽然是内存共享,但是在并发场景下,为了防止多个线程同时读写某一块内存,某个线程也可以通过互斥锁mutex让其占用内存,其他线程若要使用这块内存,则必须等待持有锁的线程执行结束后才能使用。...原创 2019-10-04 14:06:11 · 195 阅读 · 0 评论 -
synchronized
Synchronized 由于多线程环境下,多条线程可以共同操作一些共享数据,那么就有可能导致线程安全问题。synchronized关键字可以保证被它修饰的方法或代码块在任意时刻只能有一个线程被执行,从而解决了线程安全的问题。下面是本文涉及到关于synchronized的一些概括。 synchronized的使用方式 要注意的是synchronized锁的是对象而不是代码。即便sy...原创 2019-10-06 16:37:35 · 148 阅读 · 0 评论