自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(135)
  • 收藏
  • 关注

原创 Spring框架中的单例bean是线程安全的吗?

无状态的Bean的行为不受其内部状态的影响,每次调用都是基于传入的参数进行计算,而不依赖于任何之前的状态。(例如上面例子:userService是不能修改的,是无状态的bean)Spring框架中有一个@Scope注解,默认的值就是singleton,单例的。因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了。,是要考虑线程安全问题的,可以使用多例或者加锁来解决。单例bean不是线程安全。Spring框架中的。

2024-04-14 22:15:27 148

原创 MySQL如何定位慢查询?如何分析这条慢查询?

配置完毕之后,通过以下指令重新启动MVSQL服务器进行测试,查看慢日志文件中记录的信息/var/lib/mysql/localhost-slow.log。性能由好到差为 NULL(未使用表)、system、const、eq ref、ref、range、index、all。聚合查询(常用的聚合函数有:MAX()、MIN()、COUNT()、SUM()、AVG())。聚合查询、多表查询、表数据过大查询可以使用Explain/DESC(desc) 进行查询。type字段类型:sql的连接的类型。

2024-04-12 20:15:51 364

原创 Docker核心特征

Dockerfile:制作进行的文件,可以理解为制作镜像的一个清单。镜像:用来创建容器的安装包,可以理解为给电脑安装操作系统的系统镜像。容器:通过镜像来创建的一套运行环境,一个容器里可以运行多个程序,可以理解为一个电脑实例。Docker核心特征1.Docker运行在Linux内核上2.CGroups:实现了容器的资源隔离,底层是Linux Cgroup命令,能够控制进程使用的资源3.Network网络:实现容器的网络隔离,docker容器内部的网络互不影响4.Namespace命名

2024-04-11 17:45:14 747

原创 【Redis】底层跳表实现

先巩固Redis的数据类型以及底层的数据结构:ZSet(有序集合)可以使用两种不同的内部数据结构来表示:压缩列表(ziplist)和跳跃表(skiplist)。跳表是redis底层SortedSet(ZSet)的数据结构实现,是ZSet的灵魂所在;set是一个无序集合,而ZSet是有序集合。ZSet使用压缩列表情况:1.有序集合保存的元素数量小于128个;2.有序集合保存的所有元素的长度小于64个字节如果元素数量或元素大小超过了以上限制就会转换为跳表存储。

2024-04-06 14:43:06 946 3

原创 TCP和UDP区别和使用场景

TCP和UDP是计算机⽹络中两种常⽤的传输层协议,⽤于实现可靠传输和⽆连接传输。

2024-04-01 13:23:06 568 4

原创 TCP三次握手四次挥手

是否收到了同意连接请求,就只能重复同意,这些过期的请求可能回导致⽹络的混乱 设计成三次握⼿,客户端在接收到服务端的同意连接报⽂之后,就不需要再重复发送请求连接报⽂, 并且第三次握⼿客户端会发送报⽂给服务端,告诉服务端我已经知道你同意连接了,就不需要再同意我重复发的其 他请求。所以三次握⼿的原因就是避免多次建⽴重复连接,当另⼀⽅也没有数据再发送的时候,则发出连接释放通知,对⽅确认后就完全关闭了 TCP。)是⼀种⾯向连接的协议,为了保证数据传输的可靠性。主机的⽹络较差,连续发送了多个连接请求,

2024-04-01 11:46:31 365 1

原创 Redis基础类型的String底层实现

Redis数据库中所有的键都是String类型,String 的底层实现是SDS(Simple Dynamic String)。//记录buf 数组中已使用字节的数量 等于 SDS所保存的字符串的长度。SDS主要是对C语言做了一个封装,是的SDS具有动态扩容、O(1)复杂度的长度计算的特点。是在⼀个连续 的内存空间中,申请内存的时候只需要⼀次分配,效率更⾼。的编码⽅式,直接让 redis 对象的指针位设置为这个整数。中的任意数据类型的键和值都会被封装成⼀个。个字节,尾巴结束字符⼀个字节,加在⼀起共。

2024-04-01 09:43:32 276

原创 MySQL索引下推

索引下推,服务层把查询工作下推到引擎层去处理 。在引擎层查询 ‘ % 张’,查到后将记录交给server层检查是否满足where条件。导致在引擎层查询出不必要的记录,例如“张飞”索引下推:index Condition Pushdown,简称ICP,是MySQL5.6版本的新特性。效果:减少回表查询次数,提高查询效率,节约IO开销。即服务层把查询工作下推到引擎层去处理。

2024-04-01 08:26:32 273

原创 一条SQL在MySQL中的执行过程

层每从存储引擎读到⼀条记录就会发送给客户端,之所以客户端显示的时候是直接显示所有记录的, 是因为客户端是等查询语句查询完成后,才会显示出所有的记录。如果查询的语句没有命中查询缓存中,那么就要往下继续执⾏,等执⾏完后,查询的结果就会被存⼊查询缓存中。:如果⽤户名和密码都对了,会读取该⽤户的权限,然后后⾯的权限逻辑判断都基于此时读取到的权限;查询语句的执⾏⽅案确定下来 ⽐如在表⾥⾯有多个索引的时候,优化器会基于查询成本的考虑,来。对于 MySQL 8.0。:基于查询成本的考虑,选择查询成本最⼩的执⾏计划;

2024-03-31 18:49:44 1170

原创 MySQL中的三种日志

它是为了防⽌机器故障导致数据丢失的物理⽇志,它⽤于记录数据⻚做了什么修改,每当执⾏⼀ 条事务就会产⽣这样的⼀条或多条物理⽇志,然后通过。这样,当 MySQL 需要回滚时,通过重放 undolog 就可以回滚事务。)操作,包括对表结构的更改、数据的插⼊、修改、删除等等。层⽣成的的⽇志,主要⽤于数据备份和主从复制。⽇志⽂件,保存的是全量的⽇志,⽤于备份恢复和主从复制。中的⼆进制⽇志,但是它们的作⽤和实现⽅式有所不同。是在事务提交后⽣成的,因此可以⽤于恢复数据库。)⽤于恢复数据,保证数据的⼀致性和持久性。

2024-03-31 16:39:57 559

原创 Java中final关键字的作用

相同参数列表的⽅法,只是⽅法体中的实现不同,以实现不同于⽗类的功能,这种⽅式被称为⽅法重写,⼜称。⽤在⽅法的前⾯表示⽅法不可以被重写(⼦类中如果创建了⼀个与⽗类中相同名称、相同返回值类型、参赋⼀个实参,⼀旦赋值之后,就只能在⽅法体内使⽤此形参的值,不能重新进⾏赋值。⽤在变量的前⾯表示变量的值不可以改变,此时该变量可以被称为常量。要求值,即地址的值不发⽣变化),但该引⽤所指向的对象的内容。⽤在类的前⾯表示该类不能有⼦类,即该类不可以被继承。修饰的变量不能被赋值这种说法是错误的,严格的说法是,

2024-03-31 12:33:01 438

原创 多态的实现原理、泛型擦除

当通过父类类型的引用变量调用被子类重写的方法时,虚拟机会根据实际对象的类型来确定要调用的方法版本,而不是根据引用变量的声明类型。可以看到 ArrayList和 ArrayList的原始类型是相同,在编译成字节码文件后都会变成 List ,JVM看到的只有 List,看不到泛型信息,这就是泛型的类型擦除。Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程成为类型擦除。

2024-03-27 14:52:57 746 1

原创 Synchronized和Lock的对比,和选择?

(可以通过readwritelock实现读写分离) 在资源竞争不是很激烈的情况下,Synchronized的性能要优于ReetrantLock,但是在资源竞争很激烈的情况下,Synchronized的性能会下降几十倍,但是ReetrantLock的性能能维持常态;synchronized: 在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。Lock: 发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。

2024-03-27 14:23:30 711

原创 Java异常机制

这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。正确的程序在运行中,很容易出现的、情理可容的异常状况。可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。

2024-03-27 14:17:50 548

原创 JWT(JSON Web Token)

是一种开放标准,用于在网络上安全传输信息的简洁、自包含的方式。它通常被用于身份验证和授权机制。JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。总结来说,使用 JWT 相较于传统的基于会话的认证机制,可以减少服务器存储开销和管理复杂性,实现跨域支持和水平扩展,并且更适应无状态和微服务架构。前端:存储在浏览器的。

2024-03-27 00:45:19 1015

原创 Hotspot虚拟机对象问题(对象头...对象创建)

HotSpot虚拟机的自动内存管理系统要求对象起止地址必须是8字节的整数倍,也就是说对象的大小必须是8字节的整数倍,对象头部分正好是8字节的整数倍,所以,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全,对齐填充并不是必然存在的,也没有特殊的含义,只是起到了占位符的作用。4.设置对象头:初始化零值后,虚拟机需要对对象进行必要的设置,例如这个对象是哪个类的实例.如何才能找到类的元数据信息、对象的哈希码、对象的GC分代年龄等信息都是存放在对象的对象头中。的,这里我们需要重点了解对象头。

2024-03-26 20:56:03 461

原创 【Redis】数据类型、事务执行、内存淘汰策略

WATCH:监视一个或多个key,如果事务在执行前,这个key(或多个key)被其他命令修改,则事务被中断,不会执行事务中的任何命令。MULTI :开启事务,redis会将后续的命令逐个放入队列中,然后使用EXEC命令来原子化执行这个命令系列。注意事项:通过命令设置内存淘汰策略,在 redis 重启之后会失效,所以最好是在配置文件中设置内存淘汰策略。:将多个命令入队到事务中,接到这些命令并不会立即执行,而是放到等待执行的事务队列里面。DISCARD:取消事务,放弃执行事务块中的所有命令。

2024-03-25 15:05:01 666

原创 【MySQL】MVCC多版本并发控制

Read View 在特定时刻为事务创建的一个快照,该快照包含了在该时刻所有未提交事务的事务标识符,以及其他一些辅助信息。它通过在读写操作期间保存多个数据版本,以提供并发事务间的隔离性,从而避免了传统的锁机制所带来的资源争用和阻塞问题。:是指在一个事务中,读取的数据版本是在事务开始时已经存在的数据版本,而不是最新的数据版本。这种读取方式提供了事务在执行期间看到的数据视图的一致性,在 MVCC 机制中,每个事务的读操作都能看到事务开始之前的一致性数据快照,而不受其他并发事务的修改的影响。

2024-03-24 12:27:43 334

原创 【MySQL】覆盖索引

但是,当查询的结果集占表的总行数的很大一部分时,可能就不会走索引了,自动转换为全表扫描。字段的复合索引,这样在查询某个客户的订单总金额时,可以直接从索引中获取数据,无需访问实际的数据行。(订单总金额)等字段。如果我们经常需要查询某个客户的订单总金额,可以通过覆盖索引来优化这个查询。通过创建覆盖索引,数据库引擎可以直接使用索引来满足这个查询,而不需要再去读取。索引中已经包含了所有需要获取的字段的查询方式称为覆盖索引。表中的实际数据行,从而提高查询性能。的数据库表,包含订单信息,其中包括。

2024-03-24 11:26:16 618

原创 产生死锁的四大条件

不剥夺条件:线程在已获得的资源但未使用完时,不能被其他线程剥夺,只能由自己使用完释放资源。设置获取锁的超时时间:尝试获取锁的线程在规定时间内没有获取到锁,就放弃获取锁,避免因为。请求与保持条件:一个线程在请求被占资源时发生阻塞,并对已获得的资源保持不放。循环等待条件:发生死锁时,所有的线程会形成一个死循环,一直阻塞。破坏不剥夺条件:线程在申请不到所需资源时,主动放弃所持有的资源。互斥条件:一个资源在同一时刻只能由一个运算单元(进程、,而同时不释放自己的资源,导致所有线程同时被阻塞。或协程)占用(排它性)

2024-03-22 22:24:03 336 1

原创 Spring 框架中都用到了哪些设计模式?

装饰者模式通过组合的方式来扩展对象的行为,而不依赖于继承,也就是说虽然类的框架中包含继承,但只是为了获取正确的类型,而不是继承一种行为。:其中IOC的设计就涉及到BeanFactory,是Spring容器的顶层接口,也是Bean工厂最上层的接口,其会有很多工厂实现,我们可以把BeanFactory看成是一种工厂方法模式。是一个定制化工厂,其会存在于BeanFactory创建对象的过程中,当有需要时,会通过FactoryBean去自定制个性化的Bean,从而Spring框架提高扩展能力。

2024-03-22 21:09:45 1082

原创 使用openAPI自动生成前端代码遇到问题

接着我又搜索“fetch”发现 最新的node.js 17.5才引入了对fetch API的支持!fetch()是一种流行的跨平台http客户端API。开始我搜fetch需要在哪里定义?找到几个定义的方法后,不知道在前端哪个具体文件里定义,尝试了几个位置,还是没有解决!出现:‘fetch is not defined’,fetch没有定义!首先安装好openAPI之后,测试自动生成代码,出现一下错误,拒绝执行。因此我立即查看我的node.js的版本,果然不够,仅仅16.19.1;文章之后,可以执行了!

2024-03-22 15:58:38 283

原创 微服务架构常见概念

常见问题:服务多,如何管理?通讯?客户端如何访问?出现问题,如何自处理和排错?优点:独立开发 – 所有微服务都可以根据各自的功能轻松开发 独立部署 – 基于其服务,可以在任何应用程序中单独部署它们故障隔离 – 即使应用程序的一项服务不起作用,系统仍可继续运行混合技术堆栈 – 可以使用不同的语言和技术来构建同一应用程序的不同服务 粒度缩放 – 单个组件可根据需要进行缩放,无需将所有组件缩放在一起 是指在分布式系统中管理和控制各种微服务的一种方法。服务注册与发现:各个微服务向服务注册中心注册自己的信息,包括服

2024-03-17 18:20:34 877 3

原创 java设计模式

设计模式本质上是面向对象设计原则的实际运用,是对类的封装性、继承性、多态性以及类的关联关系和组合关系的充分理解。最早诞生在建筑模式,后来引用到软件领域,经过前辈的代码设计的经验,总结的一套可以的设计模式。java中设计模式共23种分为3大类。

2024-03-17 16:29:17 1397

原创 java中的对象克隆(深、浅) 和 类与类之间的关系

整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在, 部分对象不能脱离整体对象而存在。例如,头和嘴的关系,没有了头,嘴也就不存在了。关联对象只是进行地址引用,并没有创建新的对象,只将关联对象的地址指向原始引用对象。继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系。成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。接口与实现类之间的关系,接口与实现类之间的关系。

2024-03-16 12:36:06 332

原创 SpringBoot自动装配过程

Import({AutoConfigurationImportSelector.class}) 加载spring.factories文件中Spring支持的组件的配置,然后筛选保留我们项目pom.xml中配置文件的组件,加载配置类。SpringBoot自动装配过程就是:SpringBoot在启动时,如何做到自动的将项目中配置的相关文件进行加载、配置的过程。启用自动配置功能,用来加载项目中配置相关依赖的组件或bean,将bean定义加载到IOC容器中。Configuration注解,实现配置文件的功能。

2024-03-15 21:14:58 555

原创 SpringWEB组件及运行流程

注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可 以去正确执行Handler。HandlerAdapter 经过适配调用具体的处理器(Handler/Controller)。理器对象及处理器拦截器(如果有),再一起返回给 DispatcherServlet。作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理 用户的请求.作用:接受用户请求信息,调用业务方法处理请求,也称之为后端控制器。(不需要程序员开发),由框架提供,在 web.xml 中配置。

2024-03-15 12:16:02 600

原创 MySql架构

3.引擎层:真正落地实现mysql中数据的存储和提取的具体方式,不同的存储引擎特点不同。1.连接层:负责接收客户端的连接请求,进行连接处理、认证(验证账号密码)等。4.物理文件存储层:使用各种文件用来存储数据和各种日志文件。2.服务层:接收sql,语言解析,查询优化,缓存。

2024-03-12 18:03:20 371

原创 InnoDB和MyISAM存储引擎

在满足第二范式的基础上,消除非主键字段之间的传递依赖。它要求每个非主键字段只依赖于主键,而不依赖于其他非主键字段。这样可以避免数据表中的冗余数据,并确保数据的一致性和查询性能。在满足第一范式的前提下,要求非主键列完全依赖于主键。支持事务,行级锁(并发量大),外键约束,容量大,支持缓存,支撑主键自增,确保每列保持原子性,数据表中的所有字段都是不可分割的。全文检索,不存储表的总行数,需要sql逐行统计。不支持事务,不支持行锁,只有表锁并发量小,myisam存储了表的总行数,统计速度快。mysql默认存储引擎。

2024-03-12 17:43:20 956

原创 JMM(Java Memory Model)内存模型

这里的工作内存是 JMM 的一个抽象概念,也叫本地内存,其存储了该线程读/写共享变量的副本。就像每个处理器内核拥有私有的高速缓存,JMM 中每个线程拥有私有的本地内存。Java内存模型中规定了所有的变量都存储在内存中,每条线程还有自己的工作内存,线程对变量的操作都必须在工作内存中进行,而不能直接读写内存变量。不同线程之间无法直接访问对方工作内存中的变量,线程间的通信一般有两种方式进行,一是通过消息传递,二是共享内存。Java内存模型,规范了计算机内存与java虚拟机之间的协调工作,即规定了。

2024-03-11 21:48:18 532 1

原创 ConcurrentHashMap

在JDK1.8中和 Hashmap类似的结构:Node数组+链表/红黑树,当链表长度大于8,链表转化为红黑树。在JDK1.8中 synchronized只锁链表或红黑树的头节点,是一种相比于 segment 更为细粒度的锁,锁的竞争变小,所以效率更高。采用 CAs+synchronized 来保证线程安全:put时,先用key计算hash值,在计算位置如果位置上没有元素(null),采用cas机制尝试去放入如果位置已经有元素了,那么使用第一个元素作为对象,使用加锁。

2024-03-11 00:43:30 505 4

原创 线程-创建线程的方法、线程池

创建Callable接口实现的类,重写call()方法,创建该类的实例对象,作为参数创建FutureTast对象,然后以FutureTask对象作为参数创建Thread对象,调用Thread对象的start()方法。先创建实现Runnable接口的类,重写run()方法,创建类的实例对象,将对象作为参数创建Thread对象,调用Thread对象的start()方法。继承Thread类,重写run()方法,在main()函数中调用子类的strat()方法。:直接丢弃任务,不予理睬。:提交任务的线程执行,

2024-03-10 21:22:45 392 3

原创 mysql中的锁

按照锁的粒度分表锁表级锁,增删改操作时,会给正张表加锁;myisam支持表级锁,innodb中默认没有使用表锁,特点:虽然加锁的开销小,但是并发性能低。间隙锁满足某些条件,获取某个区间,即使用范围条件,而不是相等条件检索,innodb为符合条件的已有数据记录加锁,对键值在条件范围内但并不存在的记录为间隙。行锁粒度最细的锁,表示只针对当前操作的行进行 加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也 最大。行级锁分为共享锁 和 排他锁。

2024-01-27 07:00:00 1280 10

原创 mysql数据库事务(事务设置、隔离级别、实现原理)

一次对数据库操作过程,有多条sql,视为一组,一次执行,一组sql要么都提交成功,要么都失败。例如下图,事务1不加for update 执行时,事务2添加一行记录后事务1不会幻读,当事务2提交后,事务1若有for update则会出现幻读。另一个事务正在更改数据,但还没有提交事务,该事物若读取数据,可能造成脏读,不可重复读,幻读。事务只能一个一个进行,即使一个事务写,另一个事务读不可以,但是读读可以,读写不可以。一个事务只能读到另一个事务提交后的数据,解决了脏读问题,但还存在不可重复读,幻读。

2024-01-25 22:12:51 1060 11

原创 spring中循环依赖问题、Servlet 的过滤器与 Spring 拦截器区别

但是在spring中,由于对象是由spring容器管理的,当创建A 的bean对象时,B的bean还没有创建,无法将B注入到A中,同理,当创建B的bean对象时,A的bean 对象也没有创建,无法将A出入到B中,两者都不能完成创建,造成了循环依赖问题。2.发现B未创建bean对象,将A的半成品bean对象存到二级缓存中,工厂放入三级缓存中。3.创建B并初始化的bean对象,在二级缓存中拿A的半成品注入。5.完成A的bean对象创建,将B的bean对象注入到A中。当A类中关联B,B类中关联A。

2024-01-24 19:12:10 456 3

原创 Spring复习-问题回答

当应用程序中的方法被标记为需要事务管理时,在方法执行前,Spring 会创建一个代理对象,并在代理对象中织入事务管理的逻辑。调用目标类中的方法也就是非业务代码,提高了代码的复用率和灵活性,提高开发效率,降低了非业务代码与业务代码的耦合性。DI是IOC的具体实现,通过依赖注入的方式实现对象之间的解耦,依赖注入可以通过构造函数、setter 方法或字段注入的方式实现。bean是将对象的管理权限交给了Spring容器,而new对象是创建新的对象,同一个类中,使用非代理对象调用一个有事务的方法,导致事务错误。

2024-01-23 22:27:27 970 1

原创 JVM—垃圾回收

一个没有被任何引用的对象就是一个垃圾对象,垃圾对象需要被清理回收,否则一直占用内存空间,其他新对象无法使用垃圾对象空间,严重的话会造成内存溢出。

2024-01-23 22:26:12 1018

原创 JVM的组成部分(类加载器、运行时数据区、执行引擎、本地库接口)

双亲委派机制测试:当创建一个自己的String类,调用其中的类变量,由于双亲委派机制,java核心类库会创建String对象,而不会使用我们自己创建的String的类,因此报错。当 Java 虚拟机启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的本地机器指令执行。准备阶段后的值是0,而不是10,初始化阶段才为10;2.为什么使用:java环境与外界交互,因为上层的高级语言没有对底层硬件直接操作的权限,而是需要调用操作系统的接口进行调用。

2024-01-22 21:37:54 1180 11

原创 ThreadLocal为线程提供变量副本

例如两个线程使用local变量,初始值为0,线程1 set(1)后+10为11,线程2不会使用已经改变的11,而仍使用原来值作为副本+1后+20结果为21。当本地变量不再线程中继续使用时,但是value值还与外界保持引用关系,垃圾回收器就不能回收ThreadLoaclMap对象。这样就会造成内存泄漏问题。用完之后删除 threadLocal.remove();下次垃圾回收时,就可以回收ThreadLoaclMap。ThreadLocal用来为每个线程提供一个。,每个线程中的变量是相互隔离的,因此。

2024-01-21 13:20:38 391 1

原创 Java中锁的分类

4.重量级锁:当锁为轻量级锁时,自旋不会一直持续下去,达到一定次数后,还没有获取到锁,就会进入阻塞状态,该锁膨胀为重量级锁。3.轻量级锁:在偏向锁的基础上,如果有其他线程访问,将会升级为轻量级锁,让线程以自旋的方式获取锁,线程不会阻塞。公平锁:按照获取锁的顺序分配,ReentrankLock底层可以设置公平锁,默认是非公平锁。获取锁的一种方式,例如原子类,当抢锁失败后,重试几次,抢到了就继续,抢不到线程阻塞。2.偏向锁:一段同步代码被一个线程一直访问,该线程就会自动获取锁,降低获取锁的代价。

2024-01-19 20:13:21 400

陕西理工大学数学软件实训-数学实验报告(7)(矩阵运算与多项式计算)

【陕西理工大学】数学软件实训【2023】——数学实验报告(7)(矩阵运算与多项式计算),实验课程-MATLAB语言基础,实验项目-矩阵运算、多项式与插值。一、实验目的 1. 掌握数矩阵的各种运算。 2. 掌握数据插值和曲线拟合的方法及其应用。 2. 掌握多项式的常用运算。 二、实验要求 1. 根据实验内容,编写相应的MATLAB程序,并将程序及结果放置于相应位置。 2. 实验内容与结果采用小四号宋体、1.5倍行距进行排版,其中图片的宽度不超过8cm。 三、实验内容与结果

2023-09-12

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除