并发编程
文章平均质量分 84
诸葛小猿
感谢小伙伴们的关注和支持,我是【 诸 葛 小 猿 】,一个彷徨中奋斗的互联网民工。
展开
-
多线程&并发编程知识点汇总
引论(思考问题)–多线程为什么快&线程数量越多越好? 多线程如何设置参考线程数量合理? 多线程安全通信有哪些锁? 高并发容器如何选择使用?线程池如何选择和设置值?一. 多线程并发介绍1.1 线程的历史线程的历史是一部对于CPU性能压榨的历史:CPU的执行时间远远小于数据准备时间1.单进程人工切换-纸带机2.多进程批处理-多个任务批量执行3.多进程并行处理-程序写在不同的内存位置上来回切换4.多线程-一个程序内部不同任务的来回切换(OS管理)5.纤程/协程- 绿色线程,用户管理的(非原创 2022-01-28 14:17:34 · 1154 阅读 · 0 评论 -
G1垃圾回收器参数
1.JVM参数配置-Xms64m -Xmx64m -Xss1m -XX:+UseG1GC -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:ParallelGCThreads=8 -XX:+HeapDumpOnOutOfMemoryError -Xloggc:/tmp/wse-gc-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=20M -XX:原创 2021-12-28 17:06:15 · 1317 阅读 · 1 评论 -
Druid链接池的配置和使用
1.URL参数配置1.1.实例:jdbc:mysql://192.168.1.8:3306/mytest?serverTimezone=GMT%2B8&autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&connectTimeout=60000&原创 2021-12-23 17:13:57 · 15441 阅读 · 0 评论 -
ThreadPoolExecutor线程池启动问题:java.lang.IllegalArgumentException
今天对线程池的线程数量做了调整,本地测试正常,但是发布到线上是就报错了,项目也启动不了,很上火。关键告警日志Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.concurrent.ThreadPoolExecutor]: Factory method 'threadPoolExecutor' threw exception; nested exception原创 2021-12-22 13:06:17 · 6376 阅读 · 0 评论 -
Elastic-Job分布式任务调度
1 概念1.1 什么是任务调度任务调度是指系统为了自动完成特定任务,在定的特定时刻去执行任务的过程。有了任务调度即可解放更多的人力,由系统自动去执行任务。1.2 Elastic-Job简介Elastic-Job是当当⽹开源的⼀个分布式调度解决⽅案,基于Quartz⼆次开发的,由两个相互独⽴的⼦项⽬Elastic-Job-Lite和Elastic-Job-Cloud组成 。本次学习Elastic-Job-Lite,它定位为轻量级⽆中⼼化解决⽅案,使⽤Jar包的形式提供分布式任务的协调服务。Elasti原创 2021-06-01 00:51:07 · 3516 阅读 · 2 评论 -
Java多线程 J.U.C之locks框架:AQS综述
一、AQS简介AbstractQueuedSynchronizer抽象类(以下简称AQS)是整个java.util.concurrent包的核心。在JDK1.5时,Doug Lea引入了J.U.C包,该包中的大多数同步器都是基于AQS来构建的。AQS框架提供了一套通用的机制来管理同步状态(synchronization state)、阻塞/唤醒线程、管理等待队列。我们所熟知的ReentrantLock、CountDownLatch、CyclicBarrier等同步器,其实都是通过内部类实现了AQS框架暴原创 2021-03-06 11:28:07 · 185 阅读 · 0 评论 -
两个线程交替打印输出的各种写法
两个线程如何交替打印输出?这个问题可以有助于快速理解并发相关的API的使用,以及相关的原理。具体题目如下: 两个线程交替输出 第一个线程:1 2 3 4 5 6 7 第二个线程: A B C D E F G 输出结果:1A2B3C4D5E6F7G方法一:使用LockSupport的unpark和parkpackage com.wuxiaolong.concurrent;import java.util原创 2021-03-04 21:14:07 · 4250 阅读 · 3 评论 -
kafka消费延迟问题查找
最近线上偶尔爆出kafka消费延迟,但是系统的数据量并不大,为什么会延迟呢?具体分析如下。思路:1.查看机器中数据积压情况,是否是因为数据量过大导致的消费延迟。2.统计数据发送kafka成功到数据消费出来(还未做业务处理)的耗时。3.统计数据消费出来并完成业务处理的耗时。一、查看kafka机器的topic在每个分区的数据分配情况。可以看出该group中有一个topic,该topic有6个partition,消费者分布在两台机器上(两个ip),每台机器有三个消费者。重点关注每个partiti原创 2020-12-10 20:32:04 · 10131 阅读 · 0 评论 -
一文读懂线程池的工作原理
前言本文以程序员做需求的例子,比喻线程池的工作过程。以故事白话的方式展开,跟大家阐述线程池工作原理,以方便大家更好理解线程池,谢谢阅读哈~什么是线程池?什么是核心线程?什么是阻塞队列?什么是空闲时间?什么是饱和策略?什么是饱和策略?线程池工作原理流程图&源码概览什么是线程池?「小猿」 勤勤恳恳,任劳任怨,夜以继日地工作,终于有一天,他晋升为公司的主管,负责公司日常业务。有一天,老板找到了小猿,“我们公司员工越来越多了,我想搞个**「员工管理系统」**,你那边安排一下哈,原创 2020-11-05 21:12:56 · 559 阅读 · 0 评论 -
高并发系列——CAS操作及CPU底层操作解析
CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。CAS也是现在面试经常问的问题,本文将深入的介绍CAS的原理。一、简单实例一个方法实现i++时,如下面的getAndIncrement1()方法,多线程调用时,会出现并发安全问题。这时,可以通过synchronized关键字显式加锁保证并发安全。在JAVA并发包中,提供了很多的Atomic原子类,也可以保证线程安全,比如getAndIncrement2()中的Atom原创 2020-09-15 00:49:10 · 1454 阅读 · 0 评论 -
手写一个重入锁
通常我们说的并发安全问题,都是由多个线程同时修改公共的资源引起的。由于不同线程同时修改公共资源而导致最终执行的结果不确定。解决这个问题的简单的做法是使用java关键字synchronized来加锁。关于synchronized不是本期的重点,本期我们主要说重入锁。什么是锁的重入什么是重入锁?先看下面这段代码:package com.wuxiaolong.TestConcurrent;/** * Description: * * @author 诸葛小猿 * @date 2020-08-02原创 2020-08-02 23:59:50 · 1759 阅读 · 1 评论