Java毕设王
这个作者很懒,什么都没留下…
展开
-
MQ---第六篇
kafka不太依赖jvm,主要理由操作系统的pageCache,如果生产消费速率相当,则直接用pageCache。顺序写:利用磁盘的顺序访问速度可以接近内存,kafka的消息都是append操作,partition是有序的,节省了磁盘的寻道时间,同时通过批量操作、节省写入次数,partition物理上分为多个segment存储,将用户缓冲区的数据copy到socket的发送缓冲区。将内核缓冲区的数据copy到用户缓冲区。直接将内核缓冲区的数据发送到网卡传输。使用的是操作系统的指令支持。原创 2023-09-26 14:00:00 · 96 阅读 · 0 评论 -
MQ---第五篇
coordinator:通常是partition的leader节点所在的broker,负责监控group中consumer的存活,前leader分区和ISR的brokerID,state节点由leader创建,若leader宕机该节点会被删除,直到有新的。/brokers/topics:临时节点,节点保存broker节点下所有的topic信息,每一个topic节点下包含一个固。定的partitions节点,partitions的子节点就是topic的分区,每个分区下保存一个state节点、保存着当。原创 2023-09-26 10:00:00 · 128 阅读 · 0 评论 -
MQ---第四篇
缺点:速率固定、忽略了consumer的消费能力,可能导致拒绝服务或者网络拥塞等情况。解决:通过参数设置,consumer拉取数据为空或者没有达到一定数量时进行阻塞。缺点:如果kafka没有数据,会导致consumer空循环,消耗资源。根据consumer的消费能力进行数据拉取,可以控制速率。push模式:不会导致consumer循环等待。可以设置不同的提交方式,实现不同的传输语义。可以批量拉取、也可以单条拉取。3)broker的刷盘。原创 2023-09-25 14:00:00 · 92 阅读 · 0 评论 -
MQ---第三篇
镜像queue有master节点和slave节点。当请求打到slave节点时,slave节点需要将请求先重定向到master节点,master节点将将消息返回给。生产者发送数据的对象,以及消费者消费数据的对象,都是 Leader。如果有新节点加入,RabbitMQ不会同步之前的历史数据,新节点只会复制该节点加入到集群之后新增。client,同时master节点会通过GM协议将queue的最新状态广播到slave节点。:消费者消费的位置信息,监控数据消费到什么位置,当消费者挂掉再重新恢复的时候,可以从。原创 2023-09-25 10:00:00 · 93 阅读 · 0 评论 -
MQ---第二篇
通过对信道的设置实现。原创 2023-09-24 14:00:00 · 114 阅读 · 0 评论 -
MQ---第一篇
在交换器类型和绑定键固定的情况下,生产者可以在发送消息给交换器时通过指定RoutingKey来决定消。意:RabbitMQ不支持队列层面的广播消费,如果需要广播消费,可以采用一个交换器通过路由Key绑。:队列,是RabbitMQ的内部对象,用于存储消息。消息会被平均分摊(轮询)给多个消费者进行消费,而不是每个消费者都收到所有的消息进行消费。生产者将消息发送到Exchange,由交换器将消息路由到一个或多个队列中。:通过绑定将交换器和队列关联起来,在绑定的时候一般会指定一个绑定键,这样RabbitMQ。原创 2023-09-24 10:00:00 · 104 阅读 · 0 评论 -
分布式/微服务---第九篇
服务代理层( Proxy):对生产者和消费者、dubbo都会产生一个代理类封装调用细节,业务层对远程。服务注册层( Registry) : 封装服务地址的注册和发现, 以服务 URL 为中心。路由层( Cluster) : 封装多个提供者的路由和负载均衡, 并桥接注册中心。2:provider在启动时,向regisitry中心注册自己提供的服务。接口服务层( Service):面向开发者,业务代码、接口、实现等。监控层( Monitor) : RPC 调用次数和调用时间监控。原创 2023-09-23 14:00:00 · 111 阅读 · 0 评论 -
分布式/微服务---第八篇
分布式容错框架阻止故障的连锁反应,实现熔断快速失败,实现优雅降级提供实时的监控和告警资源隔离:线程隔离,信号量隔离线程隔离:Hystrix会给每一个Command分配一个单独的线程池,这样在进行单个服务调用的时候,就可以在独立的线程池里面进行,而不会对其他线程池造成影响信号量隔离:客户端需向依赖服务发起请求时,首先要获取一个信号量才能真正发起调用,由于信号量的数量有限,当并发请求量超过信号量个数时,后续的请求都会直接拒绝,进入fallback流程。原创 2023-09-23 10:00:00 · 93 阅读 · 0 评论 -
分布式/微服务---第七篇
同时当eureka的服务端发现85%以上的服务都没有心跳的话,它就会认为自己的网络出了问题,就不会。Eureka各个节点都是平等的,几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和。要有一台Eureka还在,就能保证注册服务可用(保证可用性),只不过查到的信息可能不是最新的(不。eureka:AP设计(高可用),目标是一个服务注册发现系统,专门用于微服务的服务发现注册。当节点crash后,需要进行leader的选举,在这个期间内,zk服务是不可用的。册发现来说是非常好的选择。原创 2023-09-22 14:00:00 · 108 阅读 · 0 评论 -
分布式/微服务---第六篇
znode会发生变化时,可以通过改变zk中某个目录节点的内容,利用watcher通知给各个客户端,从而。Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变。便集群机器的管理,它可以实时监控znode节点的变化,一旦发现有机器挂了,该机器就会与zk断开连。程序分布式部署时,如果把程序的这些配置信息保存在zk的znode节点下,当你要修改配置,即。被命名的实体可以是集群中的机器,服务的地址,或者是远程的对象等。父节点的创建,修改,删除都会触发Watcher事件。原创 2023-09-22 10:00:00 · 92 阅读 · 0 评论 -
分布式/微服务---第五篇
加 1,以此作为新的周期 ID。此时开启新一轮 Leader 选举,选举产生的 Leader 会与过半的 Follower 进行同步,使数据一致,当与。所有客户端的请求都是写入到 Leader 进程中,然后,由 Leader 同步到其他节点,称为 Follower。集群中所有的事务请求都由 Leader 节点来处理,其他服务器为 Follower,Leader 将客户端的事务请。是 Zab 协议的一个事务编号,Zxid 是一个 64 位的数字,其中低 32 位是一个简单的单调递增计数。原创 2023-09-21 14:00:00 · 101 阅读 · 0 评论 -
分布式/微服务---第四篇
分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中。“预提交状态”转变为“提交状态”。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有。2、后期版本提供加锁与设置时间原子操作,但是存在任务超时,锁自动释放,导致并发问题,加锁与释。每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是否存在,如果不存在。收到提交请求后就会各自执行事务提交操作,并向协调者节点反馈“Ack”消息,协调者收到所有参。原创 2023-09-21 10:00:00 · 104 阅读 · 0 评论 -
分布式/微服务---第三篇
redlock:意思的机制都只操作单节点、即使Redis通过sentinel保证高可用,如果这个master节点由于。可重入性及锁续期没有实现,通过redisson解决(类似AQS的实现,看门狗监听机制)个节点申请锁,当一半以上节点获取成功、锁才算获取成功,redission有相应的实现。数据库:利用主键冲突控制一次只有一个线程能获取锁,非阻塞、不可重入、单点、失效时间。Redis分布式锁:setNX,单线程处理网络请求,不需要考虑并发安全性。所有服务节点设置相同的key,返回为0、则锁获取失败。原创 2023-09-20 14:00:00 · 95 阅读 · 0 评论 -
分布式/微服务---第二篇
使用 Nginx (或其他复杂均衡软硬件)中的 IP 绑定策略,同一个 IP 只能在指定的同一个机器访问,但。RMI:远程方法调用,java中用于实现RPC的一种机制,RPC的java版本,是J2EE的网络调用机制,跨。时,该远程对象将会把自身的一个拷贝以Socket的形式传输给客户端,此时客户端所获得的这个拷贝称。用于与服务器端的通信,而骨架也可认为是服务器端的一个代理,用于接收客户端的请求之后调用远程。是这样做失去了负载均衡的意义,当挂掉一台服务器的时候,会影响一批用户的使用,风险很大;原创 2023-09-20 10:00:00 · 114 阅读 · 0 评论 -
分布式/微服务---第一篇
CP和AP:分区容错是必须保证的,当发生网络分区的时候,如果要继续服务,那么强一致性和可用性。源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器。最终一致性:系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态,不要。列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。原创 2023-09-19 14:00:00 · 112 阅读 · 0 评论 -
Redis---第四篇
从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有。缓存雪崩是指缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内。缓存穿透是指缓存和数据库中都没有的数据,导致所有的请求都落到数据库上,造成数据库短时间内承。缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同。崩不同的是,缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查。承受大量请求而崩掉。原创 2023-09-19 10:00:00 · 84 阅读 · 0 评论 -
Redis---第三篇
哈希算法将Redis数据的key进行散列,通过hash函数,特定的key会映射到特定的Redis节点上。优势在于非常简单,服务端的Redis实例彼此独立,相互无关联,每个Redis实例像单服务器一样运行,哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。读取数据时,当客户端操作的key没有分配在该节点上时,redis会返回转向指令,指向正确的节点。原创 2023-09-18 14:00:00 · 111 阅读 · 0 评论 -
Redis---第二篇
多个 Socket,会将 Socket 放入一个队列中排队,每次从队列中取出一个 Socket 给事件分派器,事件。户端发送的命令为MULTI、EXEC、WATCH、DISCARD中的一个,立即执行这个命令,否则将命令放入一。这个文件事件处理器,它是单线程的,所以 Redis 才叫做单线程的模型,它采用IO多路复用机制来同时。的网络通信模型,又可以跟内部其他单线程的模块进行对接,保证了 Redis 内部的线程模型的简单性。当一个客户端切换到事务状态之后,服务器会根据这个客户端发送来的命令来执行不同的操作。原创 2023-09-18 10:00:00 · 125 阅读 · 0 评论 -
Redis---第一篇
Redis的过期策略就是指当。(expires字典会保存所有设置了过期时间的key的过期时间数据,其中,key是指向键空间中的某个键的。2、由于RDB是通过fork子进程来协助完成数据持久化工作的,因此,如果当数据集较大时,可能会导。以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以。是异步完成的,其效率也是非常高的,所差的是一旦系统出现宕机现象,那么这一秒钟之内修改的数据。:每隔一定的时间,会扫描一定数量的数据库的expires字典中一定数量的key,并清除其。原创 2023-09-17 14:00:00 · 284 阅读 · 0 评论 -
Mysql---第八篇
id :是一个有顺序的编号,是查询的顺序号,有几个 select 就显示几行。5.possible_keys:它表示Mysql在执行该sql语句的时候,可能用到的索引信息,仅仅是可能,实际不一。10.filtered:返回结果的行占需要读到的行(rows列的值)的百分比,就是百分比越高,说明需要查询到。那么基本就是随着表的数量增多,要,索引优化之后,扫描读取的行数越多,说明索引设置不对,或者字段传入的类型之类的问题,说明。执行计划就是sql的执行查询的顺序,以及如何使用索引查询,返回的结果集的行数。原创 2023-09-17 10:00:00 · 417 阅读 · 0 评论 -
Mysql---第七篇
擎使用的一种关键技术。主键索引采用聚集索引(索引的数据域存储数据文件本身),辅索引的数据域存储主键的值;索引查找数据,需要先通过辅索引找到主键值,再访问辅索引;主键:是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于唯一标识一条记录,使用。索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚。簇索引,那么需要的空间就会更大,如果非聚集索引很多,一旦聚集索引改变,那么所有非聚集索引都。通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。原创 2023-09-16 14:00:00 · 263 阅读 · 0 评论 -
Mysql---第六篇
主节点 binlog,主从复制的基础是主库记录数据库的所有变更记录到 binlog。binlog 是数据库服。主节点 log dump 线程,当 binlog 有变动时,log dump 线程读取其内容并发送给从节点。主库写入binlog后强制同步日志到从库,所有的从库都执行完成后才返回给客户端,但是很显然这个方。由于mysql默认的复制方式是异步的,主库把日志发送给从库后不关心从库是否已经处理,这样会产生。和全同步不同的是,半同步复制的逻辑是这样,从库写入日志成功后返回ACK确认给主库,主库收到至。原创 2023-09-16 10:00:00 · 279 阅读 · 0 评论 -
Mysql---第五篇
多版本并发控制:读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据,版本链MVCC只在 READ COMMITTED 和 REPEATABLE READ 两个隔离级别下工作。其他两个隔离级别够和MVCC不兼容, 因为 READ UNCOMMITTED 总是读取最新的数据行, 而不是符合当前事务版本的数据行。而 SERIALIZABLE 则会对所有读取的行都加锁。trx_id。原创 2023-09-15 14:00:00 · 260 阅读 · 0 评论 -
Mysql---第四篇
用户本来应该读取到id=1的用户age应该是10,结果读取到了其他事务还没有提交的事务,结果读。在业务系统中,除了使用主键进行的查询,其他的都会在测试库上测试其耗时,慢查询的统计主要由运。据,而另一个事务却在此时插入了新的几列数据,先前的事务在接下来的查询中,就会发现有几列数据。首先分析语句,看看是否load了额外的数据,可能是查询了多余的行并且抛弃掉了,可能是加载。前一个RollBack了操作,则后一个事务所读取的数据就会是不正确的。指的是一个事务的修改在最终提交前,对其他事务是不可见的。原创 2023-09-15 10:00:00 · 153 阅读 · 0 评论 -
Mysql---第三篇
基于锁的粒度分类:行级锁(INNODB)、表级锁(INNODB、MYISAM)、页级锁(BDB引擎 )、记录锁、间。了,你们不能对整个表加共享锁或排它锁了,那么后面需要对整个表加锁的人只需要获取这个状态。如果当事务A加锁成功之后就设置一个状态告诉后面的人,已经有人对表里的行加了一个排他锁。基于锁的状态分类:意向共享锁、意向排它锁。Record lock:单个行记录上的锁。临建锁(Next-Key Lock)基于锁的属性分类:共享锁、排他锁。记录锁(Record Lock)共享锁(Share Lock)原创 2023-09-14 14:00:00 · 98 阅读 · 0 评论 -
Mysql---第二篇
索引的数据结构和具体存储引擎的实现有关,在MySQL中使用较多的索引有Hash索引,B+树索引等,B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针。哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到。B+树索引的关键字检索效率比较平均,不像B树那样波动幅度大,在有大量重复键值情况下,哈希索引。如果是范围查询检索,这时候哈希索引就毫无用武之地了,因为原先是有序的键值,经过哈希算法后,的效率也是极低的,因为存在哈希碰撞问题。原创 2023-09-14 10:00:00 · 282 阅读 · 0 评论 -
Mysql---第一篇
MyISM使用的是非聚簇索引,没有聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据。辅助索引访问数据总是需要二次查找,非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引,完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助。据,数据的物理存放顺序与索引顺序是一致的,即:只要索引是相邻的,那么对应的数据一定也是。索引的原理:就是把无序的数据变成有序的查询。原创 2023-09-13 14:00:00 · 125 阅读 · 0 评论 -
Mybatis---第二篇
编写插件: 实现 Mybatis 的 Interceptor 接口并复写 intercept()方法, 然后在给插件编写注解, 指定。截功能, 每当执行这 4 种接口对象的方法时,就会进入拦截方法,具体就是 InvocationHandler 的。4 种接口的插件, Mybatis 使用 JDK 的动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦。#{} 的变量替换是在DBMS 中、变量替换后,#{} 对应的变量自动加上单引号。Mybatis 在处理#̲{}时,会将 sql 中的#{…原创 2023-09-13 10:00:00 · 120 阅读 · 0 评论 -
Mybatis---第一篇
换句话说,使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对。管理 SQL 语句,Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。原创 2023-09-12 14:00:00 · 246 阅读 · 0 评论 -
springmvc、springBoot---第三篇
节省了下载安装tomcat,应用也不需要再打war包,然后放到webapp目录下再运行只需要一个安装了 Java 的虚拟机,就可以直接在上面部署应用程序了springboot已经内置了tomcat.jar,运行main方法时会去启动tomcat,并利用tomcat的spi机制加载springmvc。原创 2023-09-12 10:00:00 · 1089 阅读 · 1 评论 -
springmvc、springBoot---第二篇
initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect中传递参数。initHandlerExceptionResolvers(context), 其它组件都是用来干活的。initLocaleResolver(context), 解析视图需要两个参数:一是视图名,另一个是Locale。initHandlerMappings(context),处理器映射器,根据用户请求的资源uri来查找Handler的。Handler是用来干活的工具;原创 2023-09-11 14:00:00 · 134 阅读 · 0 评论 -
springmvc、springBoot---第一篇
springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器及处理器拦截器。应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。原创 2023-09-11 10:00:00 · 117 阅读 · 0 评论 -
spring---第七篇
开启自动装配,只需要在xml配置文件中定义“autowire”属性。autowire属性有五种装配的方式:no – 缺省情况下,自动配置是通过“ref”属性手动设定。手动装配:以value或ref的方式明确指定属性值都是手动装配。需要通过‘ref’属性来连接bean。byName-根据bean的属性名称进行自动装配。Cutomer的属性名称是person,Spring会将bean id为person的bean通过setter方法进行自动装配。byType-根据bean的类型进行自动装配。原创 2023-09-10 14:00:00 · 126 阅读 · 0 评论 -
spring---第六篇
REQUIRED(Spring默认的事务传播类型):如果当前没有事务,则自己新建一个事务,如果当前存在事。方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都。会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响,这种影响具体是什么就。SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行。MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常。2、方法不是public的。原创 2023-09-10 10:00:00 · 385 阅读 · 0 评论 -
spring---第五篇
作为bean,当在使用这个代理对象的方法时,如果这个方法上存在@Transactional注解,那么代理逻。首先,事务这个概念是数据库层面的,Spring只是基于数据库中的事务进行了扩展,以及提供了一些能。辑会先把事务的自动提交设置为false,然后再去执行原本的业务逻辑方法,如果执行业务逻辑方法没有。出现异常,那么代理逻辑中就会将事务进行提交,如果执行业务逻辑方法出现了异常,那么则会将事务。在使用Spring框架时,可以有两种使用事务的方式,一种是编程式的,一种是申明式的,原创 2023-09-09 14:00:00 · 221 阅读 · 0 评论 -
spring---第四篇
session:与request范围类似,确保每个session中有一个bean的实例,在session过期后,bean。如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证,最简单的办法就是改变bean的作。是调用里面的方法,而且多线程调用一个实例的方法,会在内存中复制变量,这是自己的线程的工。Spring中的Bean默认是单例模式的,框架并没有对bean进行多线程的封装处理。为线程私有的,如果bean的实例变量或类变量需要在多个线程之间共享,那么就只能使用。原创 2023-09-09 10:00:00 · 241 阅读 · 0 评论 -
spring---第三篇
使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册。ApplicationContext启动后预载入所有的单实例Bean,通过预载入单实例bean ,确保当你需要的。BeanFactory通常以编程的方式被创建,ApplicationContext还能以声明的方式创建,如使用。ApplicationContext,它是在容器启动时,一次性创建了所有的Bean。8、调用BeanPostProcessor的初始化后的方法,在这里会进行AOP。原创 2023-09-08 14:00:00 · 142 阅读 · 0 评论 -
spring---第二篇
引入IOC容器之后,对象A与对象B之间失去了直接联系,当对象A运行到需要对象B的时候,IOC容器会。全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一。没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须。种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对。AOP:将程序中的交叉业务逻辑(比如安全,日志,事务等),封装成一个切面,然后注入到目标对象。业务逻辑的组件中去。原创 2023-09-08 10:00:00 · 69 阅读 · 0 评论 -
spring---第一篇
遍历这个set集合,获取在类上有指定注解的类,并将其交给IOC容器,定义一个安全的Map用来。遍历这个IOC容器,获取到每一个类的实例,判断里面是有有依赖其他的类的实例,然后进行递归。定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注入注解、获取配置文件注。从配置文件中获取需要扫描的包路径,获取到当前路径下的文件信息及文件夹信息,我们将当前路。–提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的。–将简单的组件配置、组合成为复杂的应用,这个意义上是一个框架。原创 2023-09-07 14:00:00 · 293 阅读 · 0 评论 -
线程、并发相关---第七篇
1、一般的队列只能保证作为一个有限长度的缓冲区,如果超出了缓冲长度,就无法保留当前的任务了,阻塞队列通过阻塞可以保留住当前想要继续入队的任务。阻塞队列可以保证任务队列中没有任务时阻塞获取任务的线程,使得线程进入wait状态,释放cpu资源。阻塞队列自带阻塞和唤醒的功能,不需要额外处理,无任务执行时,线程池利用阻塞队列的take方法挂起,从而维持核心线程的存活、不至于一直占用cpu资源2、在创建新线程的时候,是要获取全局锁的,这个时候其它的就得阻塞,影响了整体效率。原创 2023-09-07 10:00:00 · 121 阅读 · 0 评论
分享