![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA并发编程
文章平均质量分 80
知识总结
Jesslili
java小小白
展开
-
juc--并发编程的核心问题总结③
接上篇 juc–并发编程的核心问题总结② 一、异步回调 1. 什么是异步回调 我们平时最常见的是同步回调,同步回调是会阻塞的,单个的线程需要等待结果的返回才能继续执行。 假设有两个任务A和B,A任务中需要使用B任务计算成果,有两种方法实现: A和B在同一个线程中顺序执行。即先执行B,得到返回结果之后再执行A。 A和B并行执行。当A需要B的计算结果时如果B还没有执行完,A可以先做其他的工作,避免阻塞,过一段时间后再询问一次B。 我们可以直接在A中写一个方法对B处理完的结果进行处理,然后B处理完之原创 2021-11-18 14:39:07 · 734 阅读 · 0 评论 -
Fork/Join的使用与原理解析
一、什么是ForkJoin Java 7开始引入了一种新的Fork/Join线程池,它可以把一个大任务拆成多个小任务并行执行,然后汇总每个小任务的执行结果得到这个大任务的最终结果。 Fork/Join任务的原理:判断一个任务是否足够小,如果足够小则直接计算,否则,就分拆成几个小任务分别计算。 fork():在当前线程运行的线程池中创建一个子任务; join():模块子任务完成的时候返回任务结果; 二、工作窃取 大任务被分割为独立的子任务,并且子任务分别放到不同的队列里,并为每个队列创建一个线程来执行队列里原创 2021-11-18 08:52:08 · 667 阅读 · 0 评论 -
juc--并发编程的核心问题总结②
接上篇 juc–并发编程的核心问题总结① 一、读写锁ReadWriteLock原创 2021-11-16 17:57:41 · 659 阅读 · 0 评论 -
juc--并发编程的核心问题总结①
文章中表明星号的地方说明是需要重点掌握的 一、juc基础知识 1. 什么是juc java.util.concurrent (juc是包名的简写)在并发编程中使用的工具类,是关于并发编程的API。 2. 线程和进程 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。 线程上下文切换比进程上下文切换要快得多。 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源,某进程.原创 2021-11-15 12:48:20 · 1053 阅读 · 2 评论 -
深入理解java中volatile的特性
一、 对volatile的理解 1. volatile是java虚拟机提供的轻量级的同步机制。 保证可见性 不保证原子性 禁止指令重排 保证可见性 什么是可见性? JMM(java内存模型) JMM是一个抽象的概念本身不存在,它描述的是一组规范,通过这组规范定义了程序中各个变量的访问方式。 可见性 原子性 有序性 由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内存,原创 2021-09-15 11:17:48 · 278 阅读 · 1 评论 -
JAVA中的集合都是线程安全的吗?
原创 2021-07-24 09:56:30 · 314 阅读 · 0 评论 -
JUC---线程间定制化通信
此博客案例来自尚硅谷JUC视频 一、线程间的通信 实现两个线程(AA、BB),使得AA线程+1,BB线程-1 package com.jess.sync; /** * @program: JUC * @description: 线程间的通信 * @author: Jess * @create: 2021-07-23 13:48 **/ //第一步 创建资源类,定义属性和操作方法 class Share { //初始值 private int number = 0; //.原创 2021-07-23 14:33:16 · 214 阅读 · 0 评论 -
多线程的安全问题
1、共享带来的问题 多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测。 临界区 一个程序运行多个线程本身是没有问题的 问题出在多个线程访问共享资源。在多个线程对共享资源读写操作时发生指令交错,就会出现问题。一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。 static int counter = 0; static void increment() // 临界区 { counter++; } static void decrement() // 临界区 { coun原创 2021-03-04 16:39:58 · 437 阅读 · 0 评论 -
多线程常见方法及使用
常用方法 sleep 与 yield sleep 调用 sleep 会让当前线程从 Running 进入 Timed Waiting 状态(阻塞) 其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时 sleep 方法会抛出 InterruptedException异常 @Slf4j(topic = "c.TestInterrupt") public class TestInterrupt { public static void main(String[] args) thro原创 2021-03-02 14:58:45 · 602 阅读 · 0 评论 -
Java多线程基础问题
1. 为什么要使用多线程? (1)更多的处理器核心 一个单线程程序在运行时只能使用一个处理器核心,那么再多的处理器核心加入也无法显著该程序的执行效率。相反,如果该程序使用多线程技术,将计算逻辑分配到多个处理器核心上,就会显著减少程序的处理时间,并且随着更多处理器核心的加入而变得更有效率。 (2)更快的响应时间 可以使用多线程技术,将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列)。这样做的好处是响应用户请求的线程能够尽可能快地处理完成,缩短响应时间,提升用户体验。 (3)更好的编程模型 Java原创 2021-03-02 11:20:54 · 147 阅读 · 0 评论