![](https://img-blog.csdnimg.cn/20200619104356256.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Java多线程
文章平均质量分 76
https://docs.oracle.com/javase/specs/jls/se8/html/jls-17.html
morningcat2018
情深不寿,慧极必伤
展开
-
Java多线程笔记1
在方法上加锁,锁定的依然是当前对象,所以这种写法等同于上面;注意:Atomic类的多个方法同时使用时不保证原子性,单独使用时才能保证原子性。上述代码中 synchronized 锁定的是 obj 这个对象;synchronized 也可以保证内存可见性,同时可以保证原子性。上述代码中 synchronized 锁定的是 当前对象;子类同步方法可以调用父类的同步方法 (可重入的另一种方式)可以配合Atomic类使用;如 AtomicInteger。在静态方法上加锁,锁定的是当前类的产品是一类对象;原创 2022-08-24 01:17:35 · 104 阅读 · 0 评论 -
CompletableFuture API 笔记
CompletableFuture API 笔记1. 异步开启一个任务supplyAsyncSupplier : T get()无入参,有返回值runAsyncRunnable : void run()无返回值2. 任务后置处理thenApplyFunction<? super T,? extends U> : R apply(T t)一个入参,有返回值thenApplyAsync 异步执行后置任务thenAcceptConsumer<原创 2021-08-30 23:34:08 · 324 阅读 · 0 评论 -
Java并发学习笔记17 LockSupport
Java并发学习笔记17 LockSupport基于 java 1.8.0LockSupport 示例package new_package.thread.locksupport;import java.util.concurrent.locks.LockSupport;public class LockSupportTest { public static void main(String[] args) { Object object = new Object(原创 2020-07-09 16:43:48 · 228 阅读 · 0 评论 -
Java并发学习笔记16 AQS 之 ReentrantReadWriteLock
bilibili-Java并发学习笔记16 AQS 之 ReentrantReadWriteLock基于 java 1.8.0P48_可重入读写锁底层源码分析及思想探究// ReadWriteLock 使用示例package new_package.thread.p45;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent原创 2020-07-06 18:28:08 · 137 阅读 · 0 评论 -
Java并发学习笔记20 线程池 ForkJoinPool
bilibili-Java并发学习笔记20 线程池 ForkJoinPool基于 java 1.8.0P64_ForkJoinPool原理与构造方式详解分而治之工作窃取适合 CPU 密集型计算任务,不适合 IO 密集型任务 /** * @param parallelism 并行度级别 默认值 = java.lang.Runtime#availableProcessors * @param factory 创建新线程的工厂 默认值 = defaultForkJoin原创 2020-07-06 18:26:15 · 325 阅读 · 0 评论 -
Java并发学习笔记19 线程池 ThreadPoolExecutor
bilibili-Java并发学习笔记19 Java线程池基于 java 1.8.0P52_Java线程池层次体系与设计原则ExecutorExecutorServiceAbstractExecutorServiceThreadPoolExecutor-> WorkerP53_线程池创建方式与工厂模式的应用创建 ThreadPoolExecutor 实例package new_package.thread.p52;import java.util.concurrent.*;原创 2020-07-04 14:35:55 · 233 阅读 · 0 评论 -
Java并发学习笔记15 ReentrantReadWriteLock 概览
bilibili-Java并发学习笔记15 ReentrantReadWriteLock 概览基于 java 1.8.0package java.util.concurrent.locks;/** * ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。 * 只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。 * * 所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果 * 也要保持与原创 2020-07-03 14:21:50 · 111 阅读 · 0 评论 -
Java并发学习笔记14 AQS 之 ReentrantLock
bilibili-Java并发学习笔记14 AQS 之 ReentrantLock基于 java 1.8.0P46_可重入锁对于AQS的实现源码分析ReentrantLock 使用案例 Lock lock = new ReentrantLock(); lock.lock(); try { // do something } finally { lock.unlock(); }公平锁和非公平锁 // 默认非公平锁原创 2020-07-02 16:49:32 · 193 阅读 · 0 评论 -
Java并发学习笔记13 AQS 概览
bilibili-Java并发学习笔记13 AQS 概览基于 java 1.8.0P45_AQS整体架构与设计原则剖析AbstractQueuedSynchronizer 源码package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import sun原创 2020-07-02 13:44:58 · 168 阅读 · 0 评论 -
Java并发学习笔记12 ThreadLocal
bilibili-Java并发学习笔记12 ThreadLocal基于 java 1.8.0P43_ThreadLocal底层源码剖析与解读本质上,ThreadLocal 是通过空间换时间,从而实现每个线程当中都会有一个变量的副本,这样每个线程就都会操作该副本,从而完全规避了多线程的并发问题。package java.lang;import java.lang.ref.*;import java.util.Objects;import java.util.concurrent.atomic.A原创 2020-06-30 20:56:22 · 169 阅读 · 0 评论 -
Java并发学习笔记11 Future
bilibili-Java并发学习笔记11 Future基于 java 1.8.0P41_Future模式示例剖析与源码详解package java.util.concurrent;/** * Future 表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并获取计算的结果。 * 计算完成后只能使用 get 方法来获取结果,如有必要,计算完成前可以阻塞此方法。取消则由 cancel 方法来执行。 * 还提供了其他方法,以确定任务是正常完成还是被取消了。一旦计算完成,就不能原创 2020-06-30 17:16:33 · 208 阅读 · 0 评论 -
Java并发学习笔记10 CAS
bilibili-Java并发学习笔记10 CAS基于 java 1.8.0P39_CAS详解及透过字节码分析变量操作的原子性悲观锁synchronized 关键字与 Lock 等锁机制都是悲观锁:无论做任何操作,首先都需要先上锁,接下来再去执行后续操作,从而确保了接下来的所有操作都是由当前这个线程来执行的。乐观锁线程在操作之前不会做任何预先的处理,而是直接去执行;当在最后执行变量更新的时候,当前线程需要有一种机制来确保当前被操作的变量是没有被其他线程修改的;CAS 是乐观锁的一种非常原创 2020-06-30 14:51:36 · 128 阅读 · 0 评论 -
Java并发学习笔记9 CountDownLatch CyclicBarrier
bilibili-Java并发学习笔记9 CountDownLatch CyclicBarrier基于 java 1.8.0P36_CountDownLatch使用场景与示例分析及底层源码解读package java.util.concurrent;import java.util.concurrent.locks.AbstractQueuedSynchronizer;/** * 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 * * 用给定的计数原创 2020-06-29 17:23:50 · 132 阅读 · 0 评论 -
Java并发学习笔记8 volatile
bilibili-Java并发学习笔记8 volatile基于 java 1.8.0P33_volatile关键字作用与锁的关系深入详解volatile 的作用:实现 long/double 类型变量的原子操作volatile double a = 1.0;jdk1.5 AtomicLong防止指令重排序实现变量的可见性JMM使用 volatile 时,不再会从寄存器中获取缓存值,而是直接从内存中获取;volatile 与 锁 相似的特点:确保变量的内存可见性原创 2020-06-29 16:09:16 · 134 阅读 · 0 评论 -
Java并发学习笔记7 Condition
bilibili-Java并发学习笔记7 Condition基于 java 1.8.0P27_Condition详解及相比于传统线程并发模式的改进public interface Lock { /** * 返回绑定到此 Lock 实例的新 Condition 实例。 * * 在等待条件前,锁必须由当前线程保持。调用 Condition.await() 将在等待前以原子方式释放锁,并在等待返回前重新获取锁。 * * Condition 实例的具体原创 2020-06-28 19:32:27 · 167 阅读 · 0 评论 -
Java并发学习笔记6 Lock锁
bilibili-Java并发学习笔记6 Lock锁基于 java 1.8.0P24_Lock锁机制深入详解/** * Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。 * 锁是控制多个线程对共享资源进行访问的工具。通常,锁提供了对共享资源的独占访问。一次只能有一个线程获得锁,对共享资源的所有访问都需要首先获得锁。不过,某些锁可能允许对共享资源并发访问,如 Rea原创 2020-06-28 14:00:45 · 360 阅读 · 0 评论 -
Java并发学习笔记5 锁升级(偏向锁/轻量级锁/重量级锁)、锁消除、锁粗化
bilibili-Java并发学习笔记5 锁升级(偏向锁/轻量级锁/重量级锁)、锁消除、锁粗化基于 java 1.8.0P18_锁升级与偏向锁深入解析在 JDK 1.5 之前(不包括1.5),若想实现线程同步,只能使用 synchronized 关键字这一方式来达到;jdk 层面,也是通过 synchronized 关键字来做到数据的原子性维护的;synchronized 关键字时 JVM 实现的一种内置锁,从 jvm 层面角度看,这种锁的获取和释放都是由 JVM 来完成的;在 JDK 1.5 中原创 2020-06-24 17:54:36 · 231 阅读 · 0 评论 -
Java并发学习笔记4 openjdk源码
bilibili-Java并发学习笔记4 openjdk源码基于 java 1.8.0P16_通过openjdk源码分析ObjectMonitor底层实现opensourceopenjdkMercurialdownloadhttp://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/file/d2c2cd90513e/src/share/vm/runtime/objectMonitor.hppclass ObjectMonitor { public原创 2020-06-23 17:43:31 · 657 阅读 · 0 评论 -
Java并发学习笔记3 synchronized
bilibili-Java并发学习笔记3 synchronized基于 java 1.8.0P11_synchronized关键字原理详解P12_透过字节码理解synchronized关键字JVM学习笔记13 synchronized对当前类实例上锁package new_package.thread.p12;public class SynchronizedTest2 { public synchronized void hello() { int i = 18;原创 2020-06-23 14:09:01 · 133 阅读 · 0 评论 -
Java并发学习笔记2 wait 和 notify
bilibili-Java并发学习笔记2 wait 和 notify基于 java 1.8.0P6_wait与sleep方法字节码分析waitwait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。当前线程必须拥有此 monitor 。该线程释放对此 monitor 的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的 mo原创 2020-06-22 16:30:26 · 10744 阅读 · 0 评论 -
Java并发学习笔记1 Thread 类
bilibili-Java并发学习笔记1 理论基础基于 java 1.8.0P5_从Thread与Runnable说开去Thread 概览java.lang.Threadpublicclass Thread implements Runnable { /* Make sure registerNatives is the first thing <clinit> does. */ private static native void registerNatives原创 2020-06-22 16:04:14 · 137 阅读 · 0 评论 -
java 中锁的种类的梳理
java 中锁的种类的梳理公平锁、非公平锁公平锁:按申请锁的顺序去分配锁;公平锁会降低吞吐量;非公平锁会造成优先级反转或者饥饿现象;synchronized 是一种非公平锁;并且没有任何办法使其变成公平锁java.util.concurrent.locks.ReentrantLock : 支持设置是否为公平锁(通过 AQS 实现线程调度)java.util.concurrent.l...原创 2020-04-30 22:27:11 · 118 阅读 · 0 评论 -
Java并发编程实战 读书笔记(1)
一、基础知识1 线程安全要编写线程安全的代码,其核心是在于对状态访问操作进行管理,特别是对共享(Shared)的和可变(Mutable)的状态的访问。如果当多个线程访问同一个可变的状态变量时没有使用合适的同步,那么程序就会出现错误。有三种方式可以修复这个问题:不在线程之间共享该状态变量;将状态变量修改为不可变的变量;在访问状态变量时使用同步。当多个线程访问某个类时,这个类始终都...原创 2019-02-25 01:50:44 · 152 阅读 · 0 评论 -
多线程控制工具类 CountDownLatch 的故事
多线程控制工具类 CountDownLatch 的故事package jdk.java.util.concurrent;import org.junit.Test;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.Random;import java.u...原创 2019-03-03 00:19:30 · 83 阅读 · 0 评论 -
同步辅助类 CyclicBarrier 的故事
同步辅助类 CyclicBarrier 的故事import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;import java.util.Random;import java.util.concurrent.CyclicBarrier;/** * @describe: CyclicBarrier ...原创 2019-03-07 20:10:46 · 105 阅读 · 0 评论 -
关于 ThreadPoolExecutor 的一些资料汇总及个人认识
关于ThreadPoolExecutor的一些资料汇总及个人认识资料汇总/** * @since 1.5 * @author Doug Lea */public class ThreadPoolExecutor extends AbstractExecutorService {构造方法ThreadPoolExecutor(int corePoolSize, int maxim...原创 2019-04-18 18:13:00 · 144 阅读 · 0 评论 -
线程池ThreadPoolExecutor的拒绝策略
AbortPolicy该策略是线程池的默认策略。使用该策略时,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常。源码如下: /** * A handler for rejected tasks that throws a * {@code RejectedExecutionException}. */ ...原创 2019-04-18 18:48:52 · 487 阅读 · 0 评论 -
关于 ScheduledThreadPoolExecutor 的一些资料汇总及个人理解
关于ScheduledThreadPoolExecutor的一些资料汇总及个人理解相关资料:关于 ThreadPoolExecutor 的一些资料汇总及个人认识1.资料汇总/** * @since 1.5 * @author Doug Lea */public class ScheduledThreadPoolExecutor extends ThreadPo...原创 2019-04-19 16:06:00 · 299 阅读 · 0 评论 -
Java ForkJoinPool 浅析
ForkJoin 浅析背景ForkJoinPool 简介背景ExecutorService 是 JDK 提供的线程池(从JDK1.5开始)/** * @since 1.5 * @author Doug Lea */public interface ExecutorService extends Executor { <T> Future<T> subm...原创 2019-06-28 17:19:24 · 343 阅读 · 0 评论 -
一个关于java多线程的小题目
一个关于java多线程的小题目使用两个线程输出:1A2B3C4D5E6F7G8H9I10J11K12L13M14N15O16P17Q18R19S20T21U22V23W24X25Y26Z使用不同的写法;........................部分解法的梳理:package com.example;import java.util....原创 2019-08-21 17:09:45 · 850 阅读 · 0 评论 -
信号量Semaphore 的故事
信号量Semaphore 的故事import org.junit.Test;import java.util.concurrent.Semaphore;/** * @describe: 信号量 Semaphore 的使用 * @author: morningcat.zhang * @date: 2019/2/14 10:05 PM */public class Semaphore...原创 2019-02-14 22:48:14 · 116 阅读 · 0 评论