并发编程
文章平均质量分 90
破土而出的生命力,源自理想主义者心底对技术的信念
数据与后端架构提升之路
没人会把我们变的越来越好,时间也只是陪衬。支撑我们变的越来越好的是我们自己不断进阶的才华,修养,品行以及不断的反思和修正
展开
-
Coding面试题之手写线程池
用Java设计一个面试版的线程池原创 2023-11-11 01:25:44 · 542 阅读 · 1 评论 -
线程池内运行的线程抛异常,线程池会怎么办
当线程池中线程执行任务的时候,任务出现未被捕获的异常的情况下,线程池会将允许该任务的线程从池中移除并销毁,且同时会创建一个新的线程加入到线程池中;可以通过ThreadFactory自定义线程并捕获线程内抛出的异常,也就是说甭管我们是否去捕获和处理线程池中工作线程抛出的异常,这个线程都会从线程池中被移除。转载 2021-08-16 23:04:06 · 5115 阅读 · 2 评论 -
并发工具类库的线程安全实战
我需要先说明下,这里的并发工具类是指用来解决多线程环境下并发问题的工具类库。一般而言并发工具包括同步器和容器两大类,业务代码中使用并发容器的情况会多一些,我今天分享的例子也会侧重并发容器。接下来,我们就看看在使用并发工具时,最常遇到哪些坑,以及如何解决、避免这些坑吧。没有意识到线程重用导致用户信息错乱的 Bug之前有业务同学和我反馈,在生产上遇到一个诡异的问题,有时获取到的用户信息是别人的。查看代码后,我发现他使用了 ThreadLocal 来缓存获取到的用户信息。我们知道,ThreadLoca原创 2021-02-24 16:48:51 · 524 阅读 · 0 评论 -
并发编程之 Java 内存模型 + volatile 关键字 + Happen-Before 规则
在操作 volatile 关键字变量前后的汇编代码中,会有一个 lock 前缀,根据 intel IA32 手册,lock 的作用是 使得 本 CPU 的Cache 写入了内存,该写入动作也会引起别的CPU或者别的内核无效化其Cache,别的CPU需要重新获取Cache。这样就实现了可见性。可见底层还是使用的 CPU 的指令。同样是lock 指令,这个指令还相当于一个内存屏障(大多数现代计算机为了提高性能而采取乱序执行,这使得内存屏障成为必须。语义上,内存屏障原创 2018-12-02 19:25:07 · 482 阅读 · 0 评论 -
并发编程之常用概念类和框架
编发编程必知概念原创 2018-12-17 15:57:44 · 553 阅读 · 0 评论 -
并发编程之Disruptor框架介绍和高阶运用
1. Disruptor是什么1.1 技术背景LMAX是在英国注册并受到FCA监管(监管号码为509778)的外汇黄金交易所, LMAX架构是LMAX内部研发并应用到交易系统的一种技术。它之所以引起人们的关注,是因为它是一个非常高性能系统,这个系统是建立在JVM平台上,核心是一个业务逻辑处理器,官方号称它能够在一个线程里每秒处理6百万订单.一个仅仅部署在4台服务器上的服务,每秒...原创 2018-12-10 11:54:47 · 4029 阅读 · 0 评论 -
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
1.最经典的缓存+数据库读写的模式,cache aside pattern1.1、Cache Aside Pattern(1)读的时候,先读缓存,缓存没有的话,那么就读数据库,然后取出数据后放入缓存,同时返回响应(2)更新的时候,先删除缓存,然后再更新数据库1.2、为什么是删除缓存,而不是更新缓存呢?(1)、如果写数据库的值与更新到缓存值是一样的,不需要经过任何的计算,可以...原创 2018-03-07 11:57:42 · 7348 阅读 · 8 评论 -
Synchronized 用法和底层原理
一、对象锁和类锁1. 对象锁在 Java 中,每个对象都会有一个 monitor 对象,这个对象其实就是 Java 对象的锁,通常会被称为“内置锁”或“对象锁”。类的对象可以有多个,所以每个对象有其独立的对象锁,互不干扰。2. 类锁在 Java 中,针对每个类也有一个锁,可以称为“类锁”,类锁实际上是通过对象锁实现的,即类的 Class 对象锁。每个类只有一个 Class 对象,所...原创 2016-08-11 10:34:44 · 1815 阅读 · 0 评论 -
并发编程之volatile 关键字白话文解读
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。作用:1.禁止指令重排2.保证从主内存加载到线程工作内存的值一直可以变为最新的(操作过程并非原子性操作)synchronize...转载 2016-11-17 11:25:44 · 3323 阅读 · 0 评论