Java 并发编程
2.wa
https://review-notes.top 技术博客
展开
-
Java 并发编程-专栏文章目录汇总
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。并发编程-基础概念Java 内存模型-基础概念Java 内存模型-顺序一致性Java 并发编程-CAS实现原理Java 内存模型-原子操作Java 内存模型- final 域的内存语义Java 并发关键字-volatileJava 并发关键字-synchronizedJava...原创 2019-12-18 11:18:35 · 3723 阅读 · 7 评论 -
LeetCode-1195.交替打印字符串(多线程)
LeetCode 题目描述编写一个可以从 1 到 n 输出代表这个数字的字符串的程序,但是:如果这个数字可以被 3 整除,输出 “fizz”。如果这个数字可以被 5 整除,输出 “buzz”。如果这个数字可以同时被 3 和 5 整除,输出 “fizzbuzz”。例如,当 n = 15,输出: 1, 2, fizz, 4, buzz, fizz, 7, 8...原创 2020-02-06 13:32:19 · 836 阅读 · 0 评论 -
LeetCode-1116.打印零与奇偶数(多线程)
LeetCode 题目描述假设有这么一个类:class ZeroEvenOdd { public ZeroEvenOdd(int n) { ... } // 构造函数 public void zero(printNumber) { ... } // 仅打印出 0 public void even(printNumber) { ... } // 仅打印出 偶数 pu...原创 2020-02-04 18:45:55 · 1138 阅读 · 0 评论 -
LeetCode-1115.交替打印FooBar(多线程)
LeetCode 题目描述我们提供一个类:class FooBar { public void foo() { for (int i = 0; i < n; i++) { print("foo"); } } public void bar() { for (int i = 0; i < n; i++) { print("...原创 2020-02-04 16:40:35 · 721 阅读 · 0 评论 -
LeetCode-1114. 按序打印(多线程)
LeetCode 题目描述我们提供了一个类:public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void three() { print("three"); }}三个不同的线程将会共用一个 Foo 实例。线程...原创 2020-02-03 21:53:44 · 743 阅读 · 0 评论 -
LeetCode-1117. H2O 生成(多线程)
Leetcode 题目描述现在有两种线程,氢 oxygen 和氧 hydrogen,你的目标是组织这两种线程来产生水分子。存在一个屏障(barrier)使得每个线程必须等候直到一个完整水分子能够被产生出来。氢和氧线程会被分别给予 releaseHydrogen 和 releaseOxygen 方法来允许它们突破屏障。这些线程应该三三成组突破屏障并能立即组合产生一个水分子。你必须保证产生一...原创 2020-02-03 18:29:20 · 454 阅读 · 0 评论 -
2020 年 Java 面试题(中高级)
自我面试背书式的学习对技术的提升帮助很小。本篇内容不涉及答案,答案需要去相关专栏学习。把面试看作是费曼学习法中的回顾、授课环节。首先我们能讲给自己听,如果不满意再回炉学习总结,如此反复。专栏学习地址:CSDN-同步发布 Java 并发编程专栏 CSDN-同步发布 Java 虚拟机(JVM) 专栏 个人技术博客-同步发布 Java 并发编程专栏 个人技...原创 2020-01-19 16:29:36 · 2239 阅读 · 0 评论 -
Java 并行任务框架-ForkJoin
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 Fork/Join 框架是什么是 Java 7 提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork 就是把一...原创 2019-12-28 15:40:28 · 455 阅读 · 0 评论 -
Java 并发编程面试题
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 吊打自己不推荐什么吊打面试官,我们先吊打自己,争取打败自己。本篇内容不涉及答案,答案需要去 《Java 并发编程》 专栏学习。不推荐背书式的面试准备。把面试看作是费曼学习法中的...原创 2019-12-28 10:56:17 · 1993 阅读 · 2 评论 -
Java 并发容器-阻塞队列
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 BlockingQueue 阻塞队列是什么队列(Queue),是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。阻塞与非阻塞,关注的是程序在等待调用结果...原创 2019-12-27 16:59:56 · 461 阅读 · 0 评论 -
Java 并发容器-ConcurrentLinkedQueue
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 ConcurrentLinkedQueue 是什么阻塞的实现方式可以用锁,非阻塞的实现方式可以使用循环 CAS 的方式来实现。ConcurrentLinkedQueue 是一个基于链...原创 2019-12-27 16:59:09 · 355 阅读 · 0 评论 -
Java 控制并发数的信号量-Semaphore
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 Semaphore 是什么Semaphore(信号量) 是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源。Semaphore 如何使用我们模拟一个...原创 2019-12-27 09:39:48 · 519 阅读 · 0 评论 -
Java 线程交换数据-Exchanger
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 Exchanger 是什么Exchanger(交换者) 是一个线程间协作的工具类,用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通...原创 2019-12-27 09:38:58 · 429 阅读 · 0 评论 -
Java 同步屏障-CyclicBarrier
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 CyclicBarrier 是什么CyclicBarrier 的字面意思是可循环使用的屏障。主要是让一组线程到达一个"屏障"时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏...原创 2019-12-27 09:38:00 · 318 阅读 · 0 评论 -
Java 等待多线程完成-CountDownLatch
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 CountDownLatch 是什么CountDownLatch 允许一个或多个线程等待其他线程完成操作。CountDownLatch 如何使用CountDownLatch 的构...原创 2019-12-27 09:36:55 · 709 阅读 · 0 评论 -
Java 线程等待操作比较(sleep、wait、park、Condition)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 知识回顾本节内容需要基础知识点如下,可参考本专栏系统文章温习《线程等待通知机制(wait、notify)》《锁相关工具类(LockSupport)》《锁等待通知机制(Condi...原创 2019-12-25 16:39:54 · 3540 阅读 · 5 评论 -
Java 锁等待通知机制(Condition)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Java 并发编程专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Java 并发编程 Condition 是什么Condition 定义了等待/通知两种类型的方法,当前线程调用这些方法时,需要提前获取到 Condition 对象关联的锁。Condition 对象是由 ...原创 2019-12-25 16:38:39 · 681 阅读 · 0 评论 -
Java 锁相关工具类(LockSupport)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。LockSupport 是什么LockSupport 定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,而 LockSupport 也成为构建同步组件的基础工具 (AQS 中大量使用了该工具类)。提供方法说明park 开头的方法用来阻塞当前线程。unp...原创 2019-12-25 14:07:52 · 653 阅读 · 0 评论 -
Java 锁-读写锁(ReentrantReadWriteLock)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。读写锁-ReentrantReadWriteLock之前提到锁 (如 Mutex 和 ReentrantLock、synchronized) 基本都是排他锁。读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一...原创 2019-12-24 19:02:49 · 374 阅读 · 0 评论 -
Java 锁-重入锁(ReentrantLock)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。重入锁-ReentrantLock重入锁 ReentrantLock,就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁的还支持获取锁时的公平和非公平性选择。ReentrantLock 虽然没能像 synchronized 关键字一样支持隐式的重进...原创 2019-12-24 16:22:38 · 347 阅读 · 0 评论 -
Java 锁-AbstractQueuedSynchronizer原理
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。知识点回顾队列同步器 AbstractQueuedSynchronizer(以下简称同步器或者 AQS)。基本概念介绍参考上篇内容《锁-AbstractQueuedSynchronizer 介绍》AQS 提供的模板方法基本上分为 3 类:独占式同步状态获取与释放(下文...原创 2019-12-24 16:21:27 · 330 阅读 · 0 评论 -
Java 锁-AbstractQueuedSynchronizer介绍
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。队列同步器介绍队列同步器 AbstractQueuedSynchronizer(以下简称同步器或者 AQS),是用来构建锁或者其他同步组件的基础框架,它使用了一个 int 成员变量表示同步状态,通过内置的 FIFO 队列来完成资源获取线程的排队工作,并发包的作者 (Doug L...原创 2019-12-23 18:07:50 · 497 阅读 · 0 评论 -
Java 锁-Lock接口简介
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。为什么要设计 Lock 接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源 (但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。在 Lock 接口出现之前,Java 程序是靠 synchronized 关键字实现锁功能的,而...原创 2019-12-23 18:04:15 · 625 阅读 · 0 评论 -
Java 原子操作类(atomic包)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。原子操作类说明当程序更新一个变量时,如果是多线程同时更新这个变量,可能得到的结果与期望值不同。我们可以用 并发关键字-volatile、并发关键字-synchronized、Lock 来解决并发读写问题。但是从性能及语义上可能存在以下问题:volatile 不能保证组合操...原创 2019-12-22 17:45:11 · 866 阅读 · 0 评论 -
Java 线程池-Executor框架
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。Executor 框架是什么Java 线程的创建与销毁需要一定的开销,因此为每一个任务创建一个新线程来执行,线程的创建与开销将浪费大量计算资源。而且,如果不对创建线程的数量做限制,可能会导致系统负荷太高而崩溃。Java 的线程既是工作单元,也是执行机制。JDK1.5 之后,工...原创 2019-12-22 15:02:00 · 503 阅读 · 0 评论 -
Java 线程池简介
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。线程池是什么线程池就是提前创建若干个线程,如果有任务需要处理,线程池里的线程就会处理任务,处理完之后线程并不会被销毁,而是等待下一个任务。由于创建和销毁线程都是消耗系统资源的,所以当你想要频繁的创建和销毁线程的时候就可以考虑使用线程池来提升系统的性能。为什么用线程池降低...原创 2019-12-20 18:11:20 · 1110 阅读 · 0 评论 -
Java 线程关键类-ThreadLocal
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。ThreadLocal 是什么ThreadLocal 提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的、互相独立的。通过 get 和 set 方法就可以得到当前线程对应的值。ThreadLocal 怎么用通过 set(T) 方法来设置一个值在...原创 2019-12-20 18:09:59 · 326 阅读 · 0 评论 -
Java 线程等待通知机制(wait、notify)
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。什么是等待/通知机制假设有两个线程,一个生产数据,一个消费数据。如何保证生产线程生产出数据后通知给消费线程,消费线程在没有数据可被消费情况下等待有数据呢?一般的做法是采用轮询方法,一直 while 循环(中间睡眠几豪秒)判断是否有数据。该办法可能存在的问题是难以确保及时性...原创 2019-12-19 18:38:56 · 1437 阅读 · 1 评论 -
Java 线程 Thread 简介
专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。什么是线程什么是进程:现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个 Java 程序,操作系统就会创建一个 Java 进程。什么是进程:现代操作系统调度的最小单元是线程,也叫轻量级进程,在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量...原创 2019-12-19 18:34:22 · 533 阅读 · 0 评论 -
Java 锁类型总结
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。锁类型总结关于锁的知识点参考《锁的内存语义》《并发同步、锁定机制比较》文章Java 锁的分类没有严格意义的规则,我们常说的分类一般都是依据锁的特性、锁的设计、锁的状态等进行归纳整理。乐观锁、悲观锁自旋锁、适应性自旋锁无锁、偏向锁、轻量级锁、重量级锁公平锁、非公平锁可重入锁、非...原创 2019-12-18 08:08:38 · 464 阅读 · 0 评论 -
Java 锁-死锁问题及解决方案
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。什么是死锁两个或多个线程互相持有对方需要的锁而导致这些线程全部处于永久阻塞状态。如:线程 A 持有对象 1 的锁,等待对象 2 的锁;线程 B 持有对象 2 的锁,等待对象 1 的锁。什么时候会死锁出现死锁必须具备以下几点:要有两个或两个以上的线程至少有两个共享资源的锁至少存在两...原创 2019-12-18 08:07:38 · 521 阅读 · 0 评论 -
Java 并发同步、锁定机制比较(CAS、volatile、synchronized、Lock)
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。比较说明本节内容主要从 CAS 、volatile 、synchronized、Lock 进行对比分析并发实现的差异。实现并发的基础是保证了可见性、有序性,因此此处不做比较。并发性比较场景CAS:单个变量支持比较替换操作,如果实际值与期望值一致时才进行修改volatile:单个变量...原创 2019-12-18 08:06:28 · 768 阅读 · 0 评论 -
Java 锁的内存语义
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。什么是锁随着集成电路越来越发达,多计算核心的机器大行其道,为了解决多个并行执行分支对某一块资源的同步访问,操作系统层面提供了 互斥信号量 的概念。在几乎所有的支持多线程编程模型的语言中,基本上都提供了与互斥信号量对应的概念,在 Java 中我们称之为锁。锁的内存语义分析本文将借助 Ree...原创 2019-12-18 08:05:04 · 331 阅读 · 0 评论 -
Java 并发关键字-synchronized
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。synchronized 实现原理JVM 基于进入和退出 Monitor 对象来实现方法同步和代码块同步,但两者的实现细节不一样。代码块同步:使用 monitorenter 和 monitorexit 指令实现的方法同步:使用另外一种方式实现的,细节在 JVM 规范里并没有详细说明。但是...原创 2019-12-18 08:04:05 · 621 阅读 · 0 评论 -
Java 并发关键字-volatile
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。volatile 的特性定义:java 编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java 语言提供了 volatile,在某些情况下比锁更加方便。如果一个字段被声明成 volatile,java 线程内存模型确保所有线程看到...原创 2019-12-18 08:03:23 · 783 阅读 · 0 评论 -
Java 内存模型-原子操作
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。什么是原子操作原子 (atomic) 本意是“不能被进一步分割的最小粒子”,而原子操作 (atomic operation) 意为“不可被中断的一个或一系列操作”。处理器如何实现原子操作处理器提供总线锁定和缓存锁定两个机制来保证复杂内存操作的原子性。 CPU-术语定义...原创 2019-12-18 08:01:34 · 483 阅读 · 0 评论 -
Java 并发编程-CAS实现原理
专栏原创出处:github-源笔记文件 ,github-源码 ,转载请附上原文出处链接和本声明。CAS 是什么CAS 是英文单词 Compare And Swap 的缩写,翻译过来就是比较并替换。Java 的 compareAndSet() 方法调用简称为 CAS。CAS 机制当中使用了 3 个基本操作数:内存地址 V,旧的预期值 A,要修改的新值 B。更新一个变量的时候,只有当变量的...原创 2019-12-18 07:59:56 · 713 阅读 · 6 评论 -
Java 内存模型- final 域的内存语义
专栏原创出处:源笔记文件 ,源码1 final域的内存语义对final域的读和写更像是普通的变量访问。下面将介绍 final域的内存语义。public class FinalExample { int i; //普通变量 final int j; //final变量 final in...原创 2019-12-07 18:49:47 · 502 阅读 · 0 评论 -
Java 内存模型-顺序一致性
内存模型-顺序一致性顺序一致性:程序的执行顺序和它编写的顺序一致,要求线程的操作具有原子性数据竞争当程序未正确同步时,就会存在数据竞争。java 内存模型规范对数据竞争的定义如下:在一个线程中写一个变量,在另一个线程读同一个变量,而且写和读没有通过同步来排序。 如果一个多线程程序能正确同步,这个程序将是一个没有数据竞争的程序,程序的执行将具有顺序一致性。顺序一致性内存模型 顺...原创 2019-12-05 17:26:20 · 679 阅读 · 0 评论 -
Java 内存模型-基础概念
该专栏源文件与 java-concurrency 同步,源码与 github-java-concurrency 同步。在线阅读基础概念原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行可见性:指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值有序性:即程序执行的顺序按照代码的先后顺序执行内存模型结构...原创 2019-12-05 17:19:51 · 1123 阅读 · 0 评论