多线程
多线程
yxh13521338301
只分享干货的码农
展开
-
分布式锁
随着业务的升级和用户量的飙升,单一节点的系统几乎很难维持这么庞大的数据请求交互。为此,足智多谋的程序猿们发明了分布式架构。使得请求通过负载均衡或其他策略降低单台服务器的访问压力,但随着系统的分解,很多分布式的问题也随之浮出水面,比如分布式事务、分布式锁等等。本文,将为大家介绍一些主流的分布式锁。(PS:需要有Redis和zk的API基础,本文不做案例展示,只分析原理)一、分布式锁概念锁的概念相信大家耳濡目染(我的前几篇博文中有相关介绍),它能确保单一JVM在高并发情况下的线程安全性。比.原创 2020-09-17 15:06:17 · 148 阅读 · 0 评论 -
volatile与JMM的那些恩怨情仇
源于蚂蚁课堂的学习,点击这里查看(老余很给力)一、前言谈起volatile,想必大家最多的影响无非其三大特性:线程可见性、防止指令重排序以及不能保证原子性。当然,初学者对于这些特性多数只能做到死记硬背,应付面试。工作中对于其真正的原理及实现方式,可能甚至还达不到一知半解。而若要对volatile的原理娓娓道来,需要先引入它的老冤家JMM了。二、JMMJMM(Java Memory Model),即Java内存模型。其主要是按照CPU的工作方式,将内存空间模型化。如下图:...原创 2020-08-12 16:16:56 · 411 阅读 · 0 评论 -
线程安全的天选之子ThreadLocal
源于蚂蚁课堂的学习,点击这里查看(老余很给力)一、前言 物欲横流的信息时代下,性能和效率是产品在百花齐放中脱颖而出的致胜法宝。作为软件研发人员,在物理硬件固定的情形中,如何确保程序高效吞吐赫然是必备的看家本领。而提升效率就会涉及老生常谈的多线程处理,那么对于这种高效手段需要注意的线程安全问题,相比很多猿友一定耳濡目染了,今天帝都的雁为大家带来一种线程安全的技术手--ThreadLocal。(PS:需要有JVM垃圾回收、强引用、软引用、弱引用以及虚引用等相关理论基础)二、用...原创 2020-08-07 15:58:21 · 175 阅读 · 0 评论 -
controller中使用了@Async不起作用
源于蚂蚁课堂的学习,点击这里查看(老余很给力)问题描述王德发?!本来想装逼使用@Async去提升代码执行效率,结果装逼失败,现在都脸疼,根本尼玛没生效啊。程序依旧是自上而下执行了,难受的一比,马哥!@Async底层原理@Async会使得当前controller类采用代理设计模式生成代理对象!!!你妹啊!!这当然会失效啊,代理模式中目标方法执行时,其方法体中调用本类其他方法,会使用this。而this指的就是目标对象,而非代理对象,所以,这时候还异步个毛啊!!都特么不走.原创 2020-05-20 15:45:31 · 4326 阅读 · 4 评论 -
java代码仿真ajax异步等待(future)
源于蚂蚁课堂的学习,点击这里查看(老余很给力)package live.yanxiaohui.test;/** * @Description 真实数据 * @CSDN https://blog.csdn.net/yxh13521338301 * @Author: yanxh<br> * @Date 2020-05-19 14:35<br> * @Version 1.0<br> */public class Real { // 请求的结果原创 2020-05-19 14:58:57 · 182 阅读 · 0 评论 -
多线程之间的通讯(仿真生产与消费)
源于蚂蚁课堂的学习,点击这里查看(老余很给力)java内存模型(jmm)java内存模型分为两大类型即,主内存和本地内存1.主内存 也就是主进程所占用的内存2.本地内存 线程中开辟的属于线程自己的内存,其中存放着全局变量的副本数据 也就是全局共享的数据实在主内存中的,线程中复制一份放入自己的本地内存,线程执行结束后将其变动刷新至主内存。 这也就是为什么多线程会有线程安全的问题所在。 多个线程同时做了修改,都去刷新主内存,会造成结果和实际不一致。原创 2020-05-15 14:10:39 · 940 阅读 · 3 评论 -
java多线程的锁机制
源于蚂蚁课堂的学习,点击这里查看(老余很给力)悲观锁和乐观锁悲观锁: 只要进行操作就会对当前的操作上锁,即悲观的认为此次操作可能会出现线程安全,故主动加锁处理。 如:sync和lock乐观锁: 不会对数据上锁,而且通过将实际的数据与预期的数据进行比较,查到后做数据的变动。 如:cas机制、数据库表的version阻塞和非阻塞阻塞: 会产生线程等待问题,当持有锁的线程处理数据时,其他线程想要访问这个数据,只能等锁的释放。非阻塞..原创 2020-05-20 11:27:35 · 201 阅读 · 0 评论 -
使用异步线程池ThreadPoolTaskExecutor进行并发处理批量操作
案例:用户在商品列表进行检索,结果集大约有100W商品,点击批量上架/下架。一、配置异步线程池1.springboot配置类ThreadPoolConfigpackage ***;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.ThreadPoolExecutor.C...原创 2019-05-16 11:01:38 · 13078 阅读 · 0 评论