![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java并发编程
文章平均质量分 92
hresh
这个作者很懒,什么都没留下…
展开
-
Java并发编程学习系列九:主流锁
Java锁学习 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Ja原创 2020-08-01 22:28:06 · 183 阅读 · 0 评论 -
Java并发编程学习系列八:单例模式
介绍 什么是单例模式? 通俗的讲,就是在应用程序中只需要某个类保留唯一一个实例对象,不希望有更多的实例。单例模式是 Java 设计模式中最简单的设计模式之一,在应用程序中经常被用到。 应用场景 单例模式的应用场景有很多,比如线程池、日志对象、缓存、数据库连接池、计算机系统设备管理器等等。这些常常都设计成全局唯一的,方便集中管理,也节省系统的开销。 实现方式 实现单例模式要注意以下三点: 1、单例类只能有一个实例,不能从其他对象中 new 出来, 即构造器用 private 修饰。 2、单例类必须自己创建自己原创 2020-07-12 19:14:21 · 280 阅读 · 0 评论 -
Java并发编程学习系列五:函数式接口、Stream流等
四大函数接口 什么是函数式接口? 有且只有一个抽象方法的接口被称为函数式接口,函数式接口适用于函数式编程的场景,Lambda 就是 Java 中函数式编程的体现,可以使用Lambda表达式创建一个函数式接口的对象,一定要确保接口中有且只有一个抽象方法,这样Lambda才能顺利的进行推导。 函数式接口里除了抽象方法之外,还允许包含默认方法和静态方法。 @FunctionalInterface注解 与@Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解:@FunctionalIn原创 2020-07-05 21:41:37 · 292 阅读 · 0 评论 -
Java并发编程学习系列四:线程池
概念 为什么要使用多线程呢? 先从总体上来说: 从计算机底层来说:线程可以比作是轻量级的进程,是程序执行的最小单位,线程间的切换和调度的成本远远小于进程。另外,多核 CPU 时代意味着多个线程可以同时运行,这减少了线程上下文切换的开销。 从当代互联网发展趋势来说:现在的系统动不动就要求百万级甚至千万级的并发量,而多线程并发编程正是开发高并发系统的基础,利用好多线程机制可以大大提高系统整体的并发能力以及性能。 再深入到计算机底层来探讨: 单核时代: 在单核时代多线程主要是为了提高 CPU 和 IO 设备原创 2020-07-05 21:27:14 · 362 阅读 · 0 评论 -
Java并发编程学习系列三:辅助类与阻塞队列
辅助类 CountDownLatch 减法计数器,位于 java.util.concurrent 包下,我们看一下关于它的定义。 主要方法有: 首先我们看一个简单的案例: public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6原创 2020-07-05 21:24:31 · 223 阅读 · 0 评论 -
Java并发编程学习系列二:集合不安全
概念 Java集合类框架的基本接口有哪些? 总共有两大接口:Collection 和 Map ,一个元素集合,一个是键值对集合; 其中 List 和 Set 接口继承了 Collection 接口,一个是有序元素集合,一个是无序元素集合; 而 ArrayList 和 LinkedList 实现了 List 接口,HashSet 实现了 Set 接口,这几个都比较常用; HashMap 和 HashTable 实现了 Map 接口,并且 HashTable 是线程安全的,但是 HashMap 性能更好; C原创 2020-07-05 21:17:35 · 212 阅读 · 0 评论 -
Java并发编程学习系列一:线程与锁
概念 什么是线程和进程? 进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。 在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。 线程与进程相似,但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以产生多个线程。与进程不同的是,同进程下的线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在原创 2020-07-05 20:03:05 · 188 阅读 · 0 评论 -
Java并发编程学习系列七:深入了解volatile关键字
文章目录前言volatile的使用volatile保证可见性volatile无法保证原子性volatile禁止指令重排volatile的原理可见性实现禁止指令重排序扩展volatile修饰对象和数组总结参考文献 前言 volatile 这个关键字可能很多朋友都听说过,它有两个重要的特性:可见性和禁止指令重排序。但是对于 volatile 的使用以及背后的原理我们一无所知,所以本文将带你好好了解一番。 由于 volatile 关键字是与 Java的内存模型有关的,因此在讲述 volatile 关键之前,我们先原创 2020-05-29 23:43:03 · 374 阅读 · 1 评论