
JAVA并发编程
文章平均质量分 81
知识总结
Jesslili
java小小白
展开
-
Java内存模型(JMM)、volatile以及CAS详解
接上篇 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 · 823 阅读 · 1 评论 -
Fork/Join的使用与原理解析
一、什么是ForkJoinJava 7开始引入了一种新的Fork/Join线程池,它可以把一个大任务拆成多个小任务并行执行,然后汇总每个小任务的执行结果得到这个大任务的最终结果。Fork/Join任务的原理:判断一个任务是否足够小,如果足够小则直接计算,否则,就分拆成几个小任务分别计算。fork():在当前线程运行的线程池中创建一个子任务;join():模块子任务完成的时候返回任务结果;二、工作窃取大任务被分割为独立的子任务,并且子任务分别放到不同的队列里,并为每个队列创建一个线程来执行队列里原创 2021-11-18 08:52:08 · 721 阅读 · 0 评论 -
juc之ReadWriteLock读写锁与线程池
接上篇 juc–并发编程的核心问题总结①一、读写锁ReadWriteLock原创 2021-11-16 17:57:41 · 733 阅读 · 1 评论 -
juc之lock锁、八锁问题、以及常用辅助类
文章中表明星号的地方说明是需要重点掌握的一、juc基础知识1. 什么是jucjava.util.concurrent (juc是包名的简写)在并发编程中使用的工具类,是关于并发编程的API。2. 线程和进程线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位。一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线。线程上下文切换比进程上下文切换要快得多。进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源,某进程.原创 2021-11-15 12:48:20 · 1181 阅读 · 2 评论 -
深入理解java中volatile的特性
一、 对volatile的理解1. volatile是java虚拟机提供的轻量级的同步机制。保证可见性不保证原子性禁止指令重排保证可见性什么是可见性?JMM(java内存模型)JMM是一个抽象的概念本身不存在,它描述的是一组规范,通过这组规范定义了程序中各个变量的访问方式。可见性原子性有序性由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),工作内存是每个线程的私有数据区域,而Java内存模型中规定所有变量都存储在主内存,原创 2021-09-15 11:17:48 · 352 阅读 · 1 评论 -
JAVA中的集合都是线程安全的吗?
原创 2021-07-24 09:56:30 · 406 阅读 · 0 评论 -
JUC---线程间定制化通信
此博客案例来自尚硅谷JUC视频一、线程间的通信实现两个线程(AA、BB),使得AA线程+1,BB线程-1package 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 · 264 阅读 · 0 评论 -
多线程的安全问题
1、共享带来的问题多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测。临界区一个程序运行多个线程本身是没有问题的问题出在多个线程访问共享资源。在多个线程对共享资源读写操作时发生指令交错,就会出现问题。一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。static int counter = 0;static void increment()// 临界区{ counter++;}static void decrement()// 临界区{ coun原创 2021-03-04 16:39:58 · 497 阅读 · 0 评论 -
多线程常见方法及使用
常用方法sleep 与 yieldsleep调用 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 · 647 阅读 · 0 评论 -
Java多线程基础问题
1. 为什么要使用多线程?(1)更多的处理器核心一个单线程程序在运行时只能使用一个处理器核心,那么再多的处理器核心加入也无法显著该程序的执行效率。相反,如果该程序使用多线程技术,将计算逻辑分配到多个处理器核心上,就会显著减少程序的处理时间,并且随着更多处理器核心的加入而变得更有效率。(2)更快的响应时间可以使用多线程技术,将数据一致性不强的操作派发给其他线程处理(也可以使用消息队列)。这样做的好处是响应用户请求的线程能够尽可能快地处理完成,缩短响应时间,提升用户体验。(3)更好的编程模型Java原创 2021-03-02 11:20:54 · 182 阅读 · 0 评论