
Java并发编程
文章平均质量分 81
coder1qiang
路漫漫其修远兮...
展开
-
Java并发编程知识概览
基础知识线程池集合类锁JUC辅助工具类JMMCASvolatile阻塞队列ThreadLocalForkJoin框架原创 2020-12-19 18:28:16 · 459 阅读 · 1 评论 -
Java并发编程:定时任务
自 JDK 1.5 开始,JDK 提供了 ScheduledThreadPoolExecutor 类用于计划任务 / 定时任务,这个类有两个用途:在给定的延迟之后运行任务周期性重复执行任务在此之前是使用 Timer 类来完成定时任务的,但是 Timer 有缺陷:Timer 是单线程模式;如果在执行任务期间某个 TimerTask 耗时较久,那么就会影响其它任务的调度;Timer 的任务调度是基于绝对时间的,对系统时间敏感;Timer 不会捕获执行 TimerTask 时所抛出的异常,.原创 2021-07-25 19:55:31 · 323 阅读 · 0 评论 -
Java多线程基础知识
1. 程序、进程、线程程序(program)是为完成特定任务、用某种语言编写的一组指令的集合,指一段静态的代码,是静态对象。进程(process)是程序的一次执行过程,或是正在运行的一个程序,是一个动态的过程。进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域。线程(thread)是一个程序内部的一条执行路径。线程作为调度和执行的基本单位。进程调度算法:先到先服务短作业优先时间片轮转优先级调度多级反馈队列(既能使高优先级的作业得到响应,又能使短作业进程迅速完成。)原创 2021-03-08 15:11:07 · 830 阅读 · 0 评论 -
Java并发编程:线程池
1. 基础知识1.1 线程池的特点降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。(线程复用)提高响应速度。当任务到达时,任务可以不需要等待线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。(控制最大并发数)1.2 异步回调同步和异步通常用来形容一次方法调用。同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。异步方法调用一旦开始,方法调原创 2020-12-04 21:24:01 · 1220 阅读 · 0 评论 -
Java并发编程:JUC辅助工具类
1. CountDownLatch:等待多线程完成CountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch可以实现的功能和join()方法类似。join方法用于让当前执行线程等待join线程执行结束。其实现原理是不停的检查join线程是否存活,如果join线程存活则让当前线程永远等待(wait(0);),直到join线程终止后,当前线程的this.notifyAll();方法才会被调用,调用notifyAll方法是在JVM里实现的。CountDow原创 2020-12-04 12:20:20 · 213 阅读 · 0 评论 -
Java并发编程:ThreadLocal
1. 概述ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。ThreadLocal的作用:提供线程内的局部变量,不同的线程之间不会相互干扰,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或组件之间一些公共变量传递的复杂度。线程并发:在多线程并发的场景下。传递数据:可以通过Th原创 2020-12-03 20:52:29 · 232 阅读 · 0 评论 -
Java并发编程:ForkJoin框架
分支合并,分而治之。Fork/Join框架:在必要的情况下,将一个大任务,拆分成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行合并。大任务:任务递归分配成若干小任务。小任务:并行求值后结果合并。Fork/Join框架与线程池的区别:Fork/Join框架采用工作窃取模式(Work-Stealing)。相对于一般的线程池实现,Fork/Join框架的优势体现在对其中包含的任务的处理方式上。在一般的线程池中,如果一个线程正在执行的任务由于某些原因无法继续运行,那么该线.原创 2020-12-03 17:10:08 · 177 阅读 · 0 评论 -
Java并发编程:阻塞队列
阻塞队列:必须要阻塞 / 不得不阻塞当队列是空的,从队列中获取元素的操作将会被阻塞;当队列是满的,往队列中添加元素的操作将会被阻塞。试图从空的队列中获取元素的线程将会被阻塞,直到其他线程往空的队列中插入新的元素。试图往满的队列中添加元素的线程将会被阻塞,直到其他线程从队列中移除一个或多个元素或者完全清空队列。在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒。为什么需要BlockingQueue呢?好处是我们不需要关心什么时候需..原创 2020-12-03 16:10:23 · 206 阅读 · 0 评论 -
Java并发编程:集合类
1. CopyOnWriteArrayListpackage java.util.concurrent;public class CopyOnWriteArrayList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { //The lock protecting all mutators. final transient ReentrantLock lock = new原创 2020-12-03 15:19:46 · 380 阅读 · 0 评论 -
Java并发编程:CAS
CAS 全称 Compare And Swap(比较与交换),是一种无锁算法。在不使用锁(没有线程被阻塞)的情况下实现多线程之间的变量同步。CAS是一种硬件对并发的支持,针对多处理器操作而设计的处理器中的一种特殊指令,用于管理对共享数据的并发访问。java.util.concurrent.atomic包中的原子类就是通过CAS来实现了乐观锁。CAS算法涉及到三个操作数:需要读写的内存值 V进行比较的值 A要写入的新值 B当且仅当 V 的值等于 A 时,CAS通过原子方式用新值B来更新V的..原创 2020-12-02 23:13:46 · 389 阅读 · 0 评论 -
Java并发编程:volatile
package com.juc.test;public class NumberTest { public static void main(String[] args) { MyNumber myNumber = new MyNumber(); new Thread(() -> { System.out.println("********** A start **********"); try {原创 2020-12-02 23:08:40 · 162 阅读 · 0 评论 -
Java并发编程:JMM
JMM(Java Memory Model)表示Java内存模型。JMM屏蔽掉了各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致性的内存访问效果。JMM的特点:可见性(通知机制)原子性有序性JMM本身是一种抽象的概念并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。JMM关于同步的规定:线程解锁前,必须把共享变量的值刷新回主内存;线程加锁前,必须读取主内存最新的值到自己.原创 2020-12-02 23:06:46 · 167 阅读 · 0 评论 -
Java并发编程:锁
1.1 LockLock接口的实现基本都是通过聚合了一个队列同步器AQS的子类来完成线程访问控制的。package java.util.concurrent.locks;import java.util.concurrent.TimeUnit;public interface Lock { //调用该方法的当前线程将会获取锁 void lock(); //可中断的获取锁,即在锁的获取中可以中断当前线程 void lockInterruptibly() throws Inte原创 2020-12-02 23:00:22 · 1096 阅读 · 0 评论