摘要: 首先引入一个概念,什么是Java类加载器? 一句话总结:类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。 官方总结:Java类加载器(英语:Java Classloader)是Java运行时环境(Java Runtime Environment)的一部分,负责动态加 阅读全文
posted @ 2024-11-04 08:15 程序员Seven 阅读(587) 评论(2) 推荐(3)
摘要: TLAB TLAB是虚拟机在堆内存的eden划分出来的一块专用空间,是线程专属的。在虚拟机的TLAB功能启动的情况下,在线程初始化时,虚拟机会为每个线程分配一块TLAB空间(包含在 Eden 空间内),只给当前线程使用,这样每个线程都单独拥有一个空间,如果需要分配内存,就在自己的空间上分配,这样就不 阅读全文
posted @ 2024-10-31 08:15 程序员Seven 阅读(160) 评论(0) 推荐(0)
摘要: 前言 Callable、Future和FutureTask是jdk1.5,java.util.concurrent包提供的异步框架 这里先讲一下什么是异步?异步是指起多个线程,多个线程之间互不干扰,各自执行各自的任务,在代码中可能书写顺序有先有后,但有可能写在后面的线程会比写在前面的线程先执行任务, 阅读全文
posted @ 2024-10-30 08:15 程序员Seven 阅读(338) 评论(0) 推荐(0)
摘要: 什么是JVM 定义:Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 内存结构 JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。这也 阅读全文
posted @ 2024-10-29 08:15 程序员Seven 阅读(522) 评论(0) 推荐(2)
摘要: 概述 线程本地变量。当使用 ThreadLocal 维护变量时, ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程。 每个线程都有一个 ThreadLocalMap ( ThreadLocal 内部类),Map中元素的键为 阅读全文
posted @ 2024-10-28 08:15 程序员Seven 阅读(819) 评论(0) 推荐(1)
摘要: 前言 项目中经常会遇到一些非分布式的调度任务,需要在未来的某个时刻周期性执行。实现这样的功能,我们有多种方式可以选择: Timer类, jdk1.3引入,不推荐。 它所有任务都是串行执行的,同一时间只能有一个任务在执行,而且前一个任务的延迟或异常都将会影响到之后的任务。可能会出现任务执行时间过长而导 阅读全文
posted @ 2024-10-24 08:00 程序员Seven 阅读(1712) 评论(0) 推荐(2)
摘要: CountDownLatch的使用方式 CountDownLatch用于某个线程等待其他线程执行完任务再执行,与thread.join()功能类似。常见的应用场景是开启多个线程同时执行某个任务,等到所有任务执行完再执行特定操作,如汇总统计结果。 面试题:如何能够保证T2在T1执行完后执行,T3在T2 阅读全文
posted @ 2024-10-23 08:00 程序员Seven 阅读(149) 评论(0) 推荐(0)
摘要: Q:经典面试题,SpringBoot 应用可以同时并发处理多少请求? A:SpringBoot 应用并发处理请求数主要由两个因素影响,使用的 Servlet容器(默认使用 Tomcat,常用的还有 jetty、undertow) 和 配置项。所以在默认配置下,SprigBoot 应用可以并发处理 2 阅读全文
posted @ 2024-10-22 08:00 程序员Seven 阅读(1943) 评论(0) 推荐(4)
摘要: 面试题:有 3 个独立的线程,一个只会输出 A,一个只会输出 B,一个只会输出 C,在三个线程启动的情况下,请用合理的方式让他们按顺序打印 ABC。 使用lock,Condition import java.util.concurrent.locks.Condition; import java.u 阅读全文
posted @ 2024-10-21 10:13 程序员Seven 阅读(406) 评论(0) 推荐(0)
摘要: 前言 生产者-消费者模式是一个十分经典的多线程并发协作模式,弄懂生产者-消费者问题能够让我们对并发编程的理解加深。 所谓的生产者-消费者,实际上包含了两类线程,一种是生产者线程用于生产数据,另一种是消费者线程用于消费数据,为了解耦生产者和消费者的关系,通常会采用共享的数据区域,就像是一个仓库,生产者 阅读全文
posted @ 2024-10-16 23:12 程序员Seven 阅读(439) 评论(0) 推荐(1)
摘要: ReentrantReadWriteLock使用场景 ReentrantReadWriteLock 是 Java 的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程)。这种锁的设计可以提高性能,特别是在读操作的数量远远超过写操作的情况下。 在并发场景中,为了解决线程 阅读全文
posted @ 2024-10-14 23:28 程序员Seven 阅读(581) 评论(0) 推荐(3)
摘要: 最近上新的项目中需要用到dubbo,于是我决定温故知新,决定分享一下Dubbo在各种环境下的使用方式,本篇文章让你两小时就能学会使用dubbo 什么是Dubbo Dubbo是一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案,可以和Spring框架无缝集成。Du 阅读全文
posted @ 2024-10-13 21:18 程序员Seven 阅读(2813) 评论(0) 推荐(2)
摘要: 频繁创建新线程的缺点? 不受控风险 系统资源有限,每个人针对不同业务都可以手动创建线程,并且创建标准不一样(比如线程没有名字)。当系统运行起来,所有线程都在疯狂抢占资源,毫无规则,不好管控。 另外,过多的线程自然也会引起上下文切换的开销。 频繁创建开销大 new Thread() 在操作系统层面并没 阅读全文
posted @ 2024-10-10 22:13 程序员Seven 阅读(1089) 评论(0) 推荐(7)
摘要: CAS 介绍 CAS 可以保证对共享变量操作的原子性 CAS全称Compare And Swap,比较与交换,是乐观锁的主要实现方式。CAS在不使用锁的情况下实现多线程之间的变量同步。ReentrantLock内部的AQS和原子类内部都使用了CAS。 CAS算法涉及到三个操作数:需要读写的内存值V。 阅读全文
posted @ 2024-10-09 22:26 程序员Seven 阅读(317) 评论(0) 推荐(0)
摘要: 在Java并发编程领域,final关键字扮演着一个至关重要的角色。虽然很多同学熟悉final用于修饰变量、方法和类的基本用法,但其在并发环境中的应用和原理却常常被忽视。final关键字不仅仅是一个简单的修饰符,它在多线程编程中确保对象状态的可见性和不变性,这对于构建线程安全的应用至关重要。本文将深入 阅读全文
posted @ 2024-10-08 18:23 程序员Seven 阅读(576) 评论(0) 推荐(5)
摘要: 介绍 volatile是轻量级的同步机制,volatile可以用来解决可见性和有序性问题,但不保证原子性。 volatile的作用: 保证了不同线程对共享变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。 禁止进行指令重排序。 底层原理 内存屏障 volatil 阅读全文
posted @ 2024-09-28 19:42 程序员Seven 阅读(636) 评论(2) 推荐(0)
摘要: 概述 在应用Sychronized关键字时需要把握如下注意点: 一把锁只能同时被一个线程获取,没有获得锁的线程只能等待; 每个实例都对应有自己的一把锁(this),不同实例之间互不影响;例外:锁对象是*.class以及synchronized修饰的是static方法的时候,所有对象公用同一把锁 sy 阅读全文
posted @ 2024-09-26 22:31 程序员Seven 阅读(542) 评论(0) 推荐(4)
摘要: 乐观锁和悲观锁 不是具体的锁,是指看待并发同步的角度 悲观锁:对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。 乐观锁:乐观锁不是真的锁 阅读全文
posted @ 2024-09-25 23:51 程序员Seven 阅读(216) 评论(0) 推荐(2)
摘要: 线程状态转换 新建(New) NEW:初始状态,线程被构建,但是还没有调用start()方法。 可运行(Runnable) RUNNABLE:可运行状态,可运行状态可以包括:运行中状态和就绪状态。也就是 可能正在运行,也可能正在等待 CPU 时间片。 包含了操作系统线程状态中的 Running 和 阅读全文
posted @ 2024-09-24 23:26 程序员Seven 阅读(547) 评论(0) 推荐(2)
摘要: JMM内存模型 定义 java内存模型(即 java Memory Model,简称JMM),不存在的东西,是一个概念,约定 主要分成两部分来看,一部分叫做主内存,另一部分叫做工作内存。 java当中的共享变量;都放在主内存当中,如类的成员变量(实例变量),还有静态的成员变量(类变量),都是存储在主 阅读全文
posted @ 2024-09-23 22:23 程序员Seven 阅读(431) 评论(2) 推荐(5)