Java
文章平均质量分 88
java基础知识学习
爱欧米
这个作者很懒,什么都没留下…
展开
-
1.场景设计题
熔断状态下,服务进入不可用状态,此时有少量的流量侦探服务状态,如果服务没有恢复继续熔断服务访问量如果超过某个阈值,超过限制部分的流量直接拒绝掉熔断状态或者主动关闭服务部分模块,保留主要功能的方式,就是服务降级的一种方式Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。可以使用这两个对象来包裹待执行的任务。用与依赖服务返回单个操作结果的场景,而。原创 2023-05-29 16:31:09 · 2778 阅读 · 0 评论 -
1、Volatile总结
一、简介volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。二、并发编程的三个基本概念(1)原子性 定义: 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任...转载 2020-10-13 11:46:38 · 562 阅读 · 0 评论 -
2、CAS原理分析
CAS的英文为Compare and Swap 翻译为比较并交换。CAS加volatile关键字是实现并发包的基石。没有CAS就不会有并发包,synchronized是一种独占锁、悲观锁,java.util.concurrent中借助了CAS指令实现了一种区别于synchronized的一种乐观锁。什么是乐观锁与悲观锁?悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样当第二个线程想拿这个数据的时候,第二个线程会一直堵塞,直到第一个释放锁,他拿到锁.转载 2020-11-23 12:31:57 · 338 阅读 · 0 评论 -
2.java容器、多线程、JVM、类加载总结
在 Java 中,每个线程都有一个上下文类加载器(Context ClassLoader),可以通过 Thread.getContextClassLoader() 方法获取。上下文类加载器是一种与双亲委托模型无关的类加载器,它可以用来打破双亲委托模型,从而使得某些类可以使用特定的类加载器进行加载,而不受默认的双亲委托规则的限制。通过 Thread.currentThread().setContextClassLoader() 方法可以将上下文类加载器设置为指定的类加载器。原创 2023-06-02 11:04:18 · 446 阅读 · 0 评论 -
3、AbstractQueuedSynchronizer源码分析
今天我们来学习jdk1.8队列同步器AbstractQueuedSynchronizer相关的原理,使用同步器可以屏蔽线程同步状态、线程排队、等待与唤醒等比较底层的操作,其他线程类只需关注自身侧重点实现。 java.util.concurrent中AbstractQueuedSynchronizer为以下类提供同步功能,列举如下:ReentranLock、Semaphore、CountDownLatch、ReentrantReadWriteLock、LimitLatch、ConcurrentHashMap、原创 2020-10-13 11:20:00 · 400 阅读 · 0 评论 -
4、Thread源码分析
谈起线程,大家是不是既熟悉有陌生,熟悉是因为我们启动任何一个程序、运行任何一个方法都伴随线程的存在,陌生是我们感受不到他的存在。下面我们一点点开始解开线程的面纱。什么是线程:线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线.原创 2020-10-13 11:42:08 · 455 阅读 · 1 评论 -
5、ThreadLocal源码
ThreadLocal大家都知道是java利用空间换取时间的一个典型的类,他到底解决了什么?在什么场景下使用?需要注意什么?现在带着这些问题进一步了解吧。ThreadLocal解决什么问题:解决线程安全的两种思路,第一种:线程同步(锁)的方式,让竞争的线程串行执行。 第二种:线程隔离,让参与竞争的线程独享一份副本资源。从其原理上来看ThreadLocal比线程同步的方式拥有更大的并发性,但是这种以空间换时间的方式,也是以牺牲内存资源为前提的,所以在大量的使用ThreadLocal的场景,一定要.原创 2020-10-13 11:35:45 · 309 阅读 · 0 评论 -
6、ReentrantLock源码
ReentrantLock是与关键字synchronized对标的一类锁, ReentrantLock除掉可以实现独占功能外,还可以实现公平锁、可中断锁、独占锁、可重入锁, ReentrantLock比Synchronized功能丰富,更适合复杂的并发业务场景,ReentrantLock使用后一定要手动释放锁,这点决定其不能取代Synchronized。 ...原创 2020-11-23 12:39:09 · 288 阅读 · 0 评论 -
7、ReentrantReadWriteLock源码分析
简介:ReentrantReadWriteLock是解决计算机场景的读写场景,并发场景有读线程和写线程同时对一个资源操作,且读场景远远多于写场景,多个读线程共享一个资源没有问题,但是多个写线程不能同时共享一个资源。前提:ReentrantReadWriteLock进入读锁前提:无其他写锁ReentrantReadWriteLock进入写锁前提:无其他写锁 且 无其他读锁特性:功能 可重入锁 不可重入锁 公平锁 非公平锁 独占锁 可中断锁 锁降级原创 2020-11-23 12:53:48 · 360 阅读 · 0 评论 -
8、ThreadPoolExecutor源码
ThreadLocal大家都知道是java利用空间换取时间的一个典型的类,他到底解决了什么?在什么场景下使用?需要注意什么?现在带着这些问题进一步了解吧。ThreadPoolExecutor解决什么问题待补充ThreadPoolExecutor数据结构待补充ThreadPoolExecutor类重点方法列举属性名称 解释 功能描述 keepAliveTime 线程空闲时间 一个线程处在空闲状态的时间超过了该属性值,就会因为超时而退出。举个例子,如果线程池的核心大小原创 2020-11-23 13:07:09 · 210 阅读 · 0 评论 -
9、sysnchronized原理
一直就像研究下sysnchronized,由于没有空快拖一年了,本篇研究sysnchronized的维度就是实验+理论分析,找网上所有关于sysnchronized的分析做实验验证。一、与CAS锁性能比较本次测试场景是变量自增。最求的是准确所以cas锁的锁持有周期一定要包住方法的执行时间。锁类型短耗时方法10毫秒(tps)长耗时方法1000毫秒(tps)sysnchronized87.50.86CAS【ReentrantLock】86.7锁持有周期1秒0.原创 2021-08-03 19:34:50 · 338 阅读 · 0 评论 -
12、锁-java对象头与锁优化与GC
HotSpot中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。原创 2022-11-13 09:56:26 · 503 阅读 · 0 评论 -
10、锁-锁分类及区别
一、单节点锁种类及使用场景2.1、公平锁 & 非公平锁锁是否按照先来后到的顺序排队获取。2.1.1、优点 & 缺点公平锁相对非公平锁不会导致线程饿死,cup无切换压力。由于其cup在队列等待整体并发要低于非公锁。2.1.2、常见案例2.1.2.1、常见公平锁ReentrantLock2.1.2.2、常见非公平锁大部分常见的锁都是非公平锁2.2、可重入锁 & 不可重入锁**不可重入锁:**比如线程执行lock_a()方法、lock_b()方法,当lock_a()原创 2021-08-03 19:38:50 · 415 阅读 · 0 评论 -
11、锁-java并发包类功能介绍
本文主要整理JDK1.8并发包下面的类提供哪些功能及相关原理。Demo实现演示一、线程安全容器类1、ConcurrentHashMap实现原理:synchronized加锁一个线程安全的容器,设计对标HashMap。和HashMap的区别是在putVal、replaceNode、clear等方法加入synchronized关键词。**使用场景:**提供线程安全的HashMap2、ConcurrentSkipListMap**实现原理:**跳表实现List线程不安全,性能算法在O(1)-logN原创 2021-08-03 19:39:12 · 226 阅读 · 0 评论 -
12、HashMap源码分析
HashMap使我们日常开发使用频率最高的一个容器之一,HashMap最早出现在JDK1.2的版本之中。HashMap在JDK1.8之前数据结构使用的是数组+链表,在JDK1.8及以后的数据结构使用的是数组+链表+红黑树。下面从数据结构、扩容机制、如何解决hash冲突、1.7版本与1.8版本差异、整体的源码剖析介绍HashMap。HashMap继承关系hashmap继承关系HashMap数据结构在讨论hashmap数据结构之前,我们先分析下hashmap结构组成部分的数据结构,了解其..原创 2020-11-25 16:00:32 · 522 阅读 · 2 评论 -
13、ConcurrentHashMap源码分析
ConcurrentHashMap 的迭代器创建后,就会按照哈希表结构遍历每个元素,但在遍历过程中,内部元素可能会发生变化,如果变化发生在已遍历过的部分,迭代器就不会反映出来,而如果变化发生在未遍历过的部分,迭代器就会发现并反映出来,这就是弱一致性。Hashtable是使用 synchronized来实现线程安全的,给整个哈希表加了一把大锁,多线程访问时候,只要有一个线程访问或操作该对象,那其他线程只能阻塞等待需要的锁被释放,在竞争激烈的多线程场景中性能就会非常差!get方法不需要加锁。原创 2020-12-11 12:05:52 · 233 阅读 · 0 评论