自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 关于程序的思考及大学的总结

今天上午没网,想趁着这个机会罗嗦几句,谈一下自己对程序的思考已经大学的总结,给自己一点鼓励。 大三下学期开学一个多星期了,大学四年,已经接近尾声。 大二下学期时参加了老师的一个研发团队,一直坚持到现在。期间做过很多项目,从基础运维,到修改需求,编写书稿,做mongodb负载均衡的实验,再到从0到1的完成一个项目从需求分析到落地应用,熬过很多夜,走过很多弯路,也有很多学长给予我引导与帮助。 到大三上学期,开始带老师的新研究生做项目。不得不说骄傲使人落后,当时的我天真的以为自己已经具备了工作的能力,只是学.

2021-03-17 10:10:23 230 1

原创 Kubernetes——使用副本机制和控制器部署托管Pod

2、副本机制和控制器部署托管Pod当需要pod能够自动保持运行,并且保持健康时,通常会创建ReplicationController或Deployment这样的资源来托管Pod,接着由它们来创建并管理实际的pod。当创建未托管的pod时 ,会选择一个集群节点来运行pod, 然后在该节点上运行容器。Kubemetes会监控这些容器, 并且在它们失败的时候自动重新启动它们。 **但是如果整个节点失败,那么节点上的pod会丢失,并且不会被新节点替换。**除非这些pod被控制器托管。2.1 保持Pod健康在

2021-10-13 18:05:18 614

原创 Kubernetes —— Pod

本章核心内容:1、Kubernetes 核心模块Pod2、如何决定是否将某些容器组合在一个pod中3、pod可以运行多个进程,类似于物理机4、如何编写Yaml或Json描述文件用于创建Pod,以及如何查看pod的规格和当前状态5、如何使用标签来组织pod,并且同时在多个pod中执行操作6、如何使用节点标签将pod只调度到提供某些特性的节点上7、注解的作用,用法。8、Kubernetes的命名空间。1、介绍Podpod是一组并置的容器,代表了K8s中的基本构建模块。在实际应用中,我们并不会

2021-10-11 16:25:10 268

原创 Kubernetes集群搭建,基于kubeadm自动化脚本、内外网两种方式部署

1、自动化脚本脚本内容:配置基础环境、安装docker、cni、kubelet、kubeadm、kubectl,主节点、工作节点都要执行。# 重置kubeadmecho "----------------重置系统环境--------------------"sudo kubeadm reset# 重置iptablesiptables -F && iptables -t nat -F && iptables -t mangle -F && ipta

2021-09-02 19:11:19 824

原创 Kubernetes(三)如何管理、暴露服务

一、Pod概念在一个集群中,K8S会为每个Pod都分配一个集群内唯一的IP地址。因为K8S要求底层网络支持集群内的任意节点之间的两个Pod能够直接通信。这些容器共享当前Pod的文件系统和网络,而这些容器之所以能够共享,是因为Pod中有一个叫Pause的根容器,其余的用户业务容器都是共享这个根容器的IP和Volume。所以这些容器之间都可以通过localhost进行通信。1、为什么要引入根容器的概念?那是因为如果没有根容器的话,当一个Pod中引入了多个容器的时候,我们应该用哪一个容器的状态来判断Pod的

2021-08-01 16:13:50 268

原创 Kubernetes(二)核心模块

k8s基础概念:ClusterCluster 是计算、存储和网络资源的集合,Kubernetes 利用这些资源运行各种基于容器的应用。MasterKubernetes里的Master指的是集群控制节点,负责整个集群的管理和控制,基本上接收Kubernetes的所有控制命令,master负责具体的执行过程。master相当于Kubernetes集群的大脑,非常重要(高可用部署建议用3台服务器,推荐选举)。一旦master宕机或者不可用,那么对集群内容器应用的管理都将失效。运行在master上的组

2021-07-25 21:00:26 770 6

原创 Kubernetes(一)全生命流程

作为实习生,整天听组里的大佬们谈一些kubectl、Pod等有关k8s的概念,听不懂很难受,于是下定决心学一下。K8s作为虚拟化容器的集大成者想要搞懂真的很难,看了很多概念仍然是一头雾水,感觉比较合适的学习路线是先搞懂它是用来干嘛的,然后弄清楚几个关键概念,比如Pod,再把集群搭起来,服务部署上去(怎么用),然后反过来看原理。本篇将从整体上(全生命流程中)了解什么是kubernetes。学习K8S前最好要了解一点云原生的相关内容。1、k8s是什么?kubernetes是一个基于容器技术的分布式架

2021-07-25 20:38:49 275

原创 Golang之ORM框架Gorm快速开始

Gorm快速入门Gorm是Go语言的ORM框架,其特点有:全特性 ORM (几乎包含所有特性)模型关联 (一对一, 一对多,一对多(反向), 多对多, 多态关联)钩子 (Before/After Create/Save/Update/Delete/Find)预加载事务复合主键SQL 构造器自动迁移日志基于GORM回调编写可扩展插件全特性测试覆盖开发者友好快速开始:安装go get -u github.com/jinzhu/gorm连接数据库: db, e

2021-06-15 20:22:10 782 3

原创 Golang之GoPath(工作目录)与Modules(包管理)的比较

GoPathGOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。工作区的概念与工作目录的概念也是类似的。如果不使用工作目录的概念,在多人开发时,每个人有一套自己的目录结构,读取配置文件的位置不统一,输出的二进制运行文件也不统一,这样会导致开发的标准不统一,影响开发效率。采用go env可以查看GoPath的路径, 在程序中import导的包 通过 g

2021-06-15 17:51:41 2079 3

转载 Golang快速入门

一、Go语言基础:1、定义包名 ,说明这个文件属于哪个包,main包表示是一个可独立执行的程序,每个Go程序都包含一个名为main的包。package main2、引用包,这点与Java等面向对象的语言类似,引用后可直接调用(不过不需要再次声明对象),如下说明该程序需要使用fmt包中的某些函数或者是元素,那fmt就是一个非常常用的包,实现了格式化IO的函数,比如fmt.Println输出到console。import "fmt"3、函数声明, main函数是每个可执行的程序必须包含的,一般来说

2021-06-11 18:47:36 280

原创 Docker的简单应用—>使用Docker安装Mysql8.0

Docker应用之安装Mysql1、安装前确保本机已经安装docker,可以使用docker version来查看docker是否安装。2、下载镜像:docker pull mysql:8.0.163、执行命令:docker run -p 3306:3306 --name mysql8.0 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0设置端口,实例名,密码,MYSQL_ROOT_PASSWORD 为密码。4、查看实例运行情况:docker ps5、

2021-06-11 16:13:45 99 2

原创 Docker和K8S的比较(初探)

1、Docker和K8SDocker 是一个开源的、轻量级的容器引擎,和 VMware 虚拟机相比,Docker 使用容器承载应用程序,而不使用操作系统,所以它的开销很少,性能很高。但是,Docker 对应用程序的隔离不如虚拟机彻底,所以它并不能完全取代 VMware。在传统的开发过程中(我之前的开发过程),以Java为例,一般都是本地(开发机)开发运行然后打成jar、war包放到服务器上,然后在服务器上部署相关环境(JDK、Redis、Mysql、Nginx等),非常麻烦。一款产品开发–上线是两套不同

2021-06-11 16:08:42 18484 12

原创 鹅厂入职满月的碎碎念

不知不觉已经来鹅厂一月了,前几天翻看自己QQ空间的时候很庆幸自己很多东西都没删,可以看到自己的成长过程,昨天翻看学姐博客的时候突然发现自己已经很久没有写点什么了,于是就有了记录技术&生活的念头。今天是入职腾讯的第一个月整,也恰好是周五,手头上的工作都已经处理完毕,上午汇报时leader说了一句不错让我心情好了一天,周围同事对我都很好,尤其是我的导师,给我讲解方案时常常蹲在地上,带我去逛公园,告诉我一些职场上的道理,让我意识到不能只是闷头写代码, 要经常停下来思考总结一下自己,只有抬起头来才会看到前

2021-06-11 15:58:04 162 1

原创 TCP断开连接的过程及状态变迁

TCP断开连接TCP的四次挥手TCP 断开连接是通过四次挥手方式。双方都可以主动断开连接,断开连接后主机中的「资源」将被释放。第一次挥手(FIN=1,seq=x):假设客户端想要关闭连接,客户端发送一个FIN标志位置为1的包,表示自己已经没有数据可以发送了,但是仍然可以接收数据。发送完毕之后,客户端进入FIN_WAIT_1状态。第二次挥手(ACK=1,ACKnum=x+1):服务器端确认客户端的FIN包,发送一个确认包,表明自己接收到了客户端关闭连接的请求,但还没有准备好关闭连接。发

2021-04-14 14:07:13 2201

原创 TCP的分片

TCP的分片先来认识下 MTU 和 MSSMTU:一个网络包的最大长度,以太网中一般为 1500 字节;MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度;既然 IP 层会分片,为什么 TCP 层还需要 MSS呢?如果在 TCP 的整个报文(头部 + 数据)交给 IP 层进行分片,会有什么异常呢?当 IP 层有一个超过 MTU 大小的数据(TCP 头部 + TCP 数据)要发送,那么 IP 层就要进行分片,把数据分片成若干片,保证每一个分片都小于 MTU

2021-04-14 11:45:38 4699

原创 TCP三次握手过程及状态变迁

TCP的连接建立:1、TCP三次握手过程和状态变迁TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态第一次握手:客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据

2021-04-14 11:34:34 2116

原创 重学TCP之TCP的基本认识

TCP的基本认识什么是 TCP ?TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。**面向连接:**一定是「一对一」才能连接,不能像 UDP 协议可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的;**可靠的:**无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接收端;**字节流:**消息是「没有边界」的,所以无论我们消息有多大都可以进行传输。并且消息是「有序的」,当「前一个」消息没有收到的时候,即使它先收到了后面的字节,那么也不能扔给应用层去

2021-04-14 11:10:38 503

原创 Redis应用之实现延迟队列以及限流

1、延迟队列实现延迟队列的应用场景:订单超过 30 分钟未支付,则自动取消。外卖商家超时未接单,则自动取消。医生抢单电话点诊,超过 30 分钟未打电话,则自动退款。等等场景都可以用定时任务去轮询实现,但是当数据量过大的时候,高频轮询数据库会消耗大量的资源,此时用延迟队列来应对这类场景比较好。延迟队列可以通过Redis的ZSet数据结构实现,可以将消息序列化成为一个字符串作为zset的value,这个消息的到期处理时间作为score,然后用多线程轮询zset的到期的任务进行处理。多个线程轮询保

2021-04-14 09:57:51 587

原创 基于NIO的网络通信框架——Netty

6、Netty什么是Netty?Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架。1)本质:JBoss做的一个Jar包2)目的:快速开发高性能、高可靠性的网络服务器和客户端程序3)优点:提供异步的、事件驱动的网络应用程序框架和工具通俗的说:一个好使的处理Socket的框架Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架,对比于BIO(Blocking I/O,阻塞IO),他的并

2021-03-28 15:39:55 648 1

原创 零拷贝简介

零拷贝零拷贝主要的任务就是避免CPU将数据从一块存储拷贝到另外一块存储,主要就是利用各种零拷贝技术,避免让CPU做大量的数据拷贝任务,减少不必要的拷贝,或者让别的组件来做这一类简单的数据传输任务,让CPU解脱出来专注于别的任务。这样就可以让系统资源的利用更加有效。零拷贝给我们带来的好处:减少甚至完全避免不必要的CPU拷贝,从而让CPU解脱出来去执行其他的任务减少内存带宽的占用通常零拷贝技术还能够减少用户空间和操作系统内核空间之间的上下文切换。Linux 中零拷贝技术的实现方向① 直接 I/

2021-03-28 15:14:48 210

原创 IO多路复用之select、poll、epoll

IO多路复用之select、poll、epoll**IO多路复用是指内核一旦发现线程指定的一个或者多个IO条件准备读取,它就通知该进程。**当客户处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用。与多进程和多线程技术相比,I/O多路复用技术的最大优势是系统开销小,系统不必创建进程/线程,也不必维护这些进程/线程,从而大大减小了系统的开销。目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符

2021-03-28 14:48:06 254

原创 网络编程之NIO模型

1、阻塞与非阻塞阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时:阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。2、同步与异步同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。老王烧开水:1、普通水壶煮水,站在旁边,主动的看水开了没有?同步的阻塞2、普通水壶煮水,

2021-03-28 11:30:27 478

原创 深入了解Spring及SpringBoot自动装配、循环依赖问题

文章目录1、什么是 Spring 框架?2、列举一些重要的Spring模块?3、 @RestController vs @Controller4、 Spring IOC & AOP谈谈自己对于 Spring IoC 和 AOP 的理解1、IoC、DI2、IOC用到哪些设计模式?工厂模式单例模式策略模式AOPSpring AOP 和 AspectJ AOP 有什么区别?5、Spring beanSpring 中的 bean 的作用域有哪些?Spring 中的单例 bean 的线程安全问题了解吗?@Co

2021-03-27 16:42:56 935

原创 Mysql之索引原理

索引索引的作用是做数据的快速检索,而快速检索的实现的本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。索引的底层数据结构:哈希表(Hash)哈希表是做数据快速检索的有效利器。哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行具体数据的数据结构。Hash索引的缺点:使用哈希算法实现的索引虽然可以做到快速检索数据,但是没办法做数据高效范围查找,因此哈希索引是不适合作为 Mysql 的底层索引的数据结构。二叉查找树(BS

2021-03-26 15:16:38 77 1

原创 Synchronized锁

Synchronized1.1 原子性所谓原子性就是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作,即这些操作是不可被中断的,要么执行,要么不执行。但是像i++、i+=1等操作字符就不是原子性的,它们是分成读取、计算、赋值几步操作,原值在这些步骤还没完成时就可能已经被赋值了,那么最后赋值写入的数据就是脏数据,无法保证原子性。被synchronized修饰的类或对象的所有操作都是原子的,因为在执行操作

2021-03-23 20:40:45 98

原创 LockSupport

LockSupport用于创建锁和其他同步类的基本线程阻塞原语。LockSupport其实就是对线程等待唤醒机制(wait/notify)的改良版。什么是LockSupport?通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作LockSupport是一个线程阻塞工具类,所有的方法都是静态方法,可以让线程在任意位置阻塞,阻塞之后也有对应的唤醒方法。归根结底,LockSupport调用的Unsafe中的native代码。官网解释:LockSupport是用来创建锁和其他

2021-03-23 18:39:10 70

原创 IOC与AOP及相关设计模式

IOC/DI1、什么是IOC、DI?IOC:Inversion of Control —— 控制反转【注意:这是一种思想】DI:Dependency Injection —— 依赖注入其实这两个概念本质上是没有区别的,DI可以看作是IOC思想的一种实现。假设这么一个场景:在A类中调用B类的方法,那么我们就称 A依赖B,B为被依赖(对象),相信这点大家能够理解。传统做法:(1)直接在A(方法)中new出B类对象,然后调用B类方法 —— 硬编码耦合;(2)通过简单工厂获取B类对象,然后调用B类

2021-03-23 17:02:53 1681

原创 注解与反射概述

注解Annotation什么是注解?注解,顾名思义,注解,就是对某一事物进行添加注释说明,会存放一些信息,这些信息可能对以后某个时段来说是很有用处的。Java注解又叫java标注,java提供了一套机制,使得我们可以对方法、类、参数、包、域以及变量等添加标准(即附上某些信息)。且在以后某个时段通过反射将标注的信息提取出来以供使用。Annotation 是从 JDK 1.5 开始引入的新技术Annotation 的作用不是程序本身,可以对程序作出解释(这一点和注释没什么区别)可以被其它程序(

2021-03-23 15:45:11 121

原创 JVM基本参数调优

JVM参数调优1、JVM的标配参数和X参数JVM的参数类型:标配参数java -versionjava -help-后不能由空格X参数(了解)-Xint():解释执行-Xcomp :第一次使用就编译成本地代码-Xmixed:混合模式XX参数下文再讲:2、XX类型参数之布尔类型:公式:-XX:+ 或者 - 某个属性值(+表示开启,-表示关闭)如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?jps -l (类似于Lin

2021-03-22 22:14:44 297

原创 JVM中的强引用、软引用、弱引用以及虚引用

强软弱虚引用:前言在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。1、强引用(StrongReference)强引用是使用最普遍的引用。如果一个对象具有强引用,那垃圾回收器绝不会回收它。如下:Object strongReference

2021-03-22 21:14:57 423

原创 JVM中如何确定哪些对象被回收?(枚举根节点做可达性分析)

如何确定哪些对象是否可以被回收?1.引用计数法。上文提到了,引用一次计数加1,取消引用则减一,等到为0时等待被回收,现已不被使用。2.枚举根节点做可达性分析:目前主流的商用JVM都是通过可达性分析来判断对象是否可以被回收的。这个算法的基本思路是:通过一系列被称为「GCRoots」的根对象作为起始节点集,从这些节点开始,通过引用关系向下搜寻,搜寻走过的路径称为「引用链」,如果某个对象到GCRoots没有任何引用链相连,就说明该对象不可达,即可以被回收。那么什么是对象可达?GC Roots是

2021-03-22 21:11:52 591

原创 深入理解GC(分代收集算法)垃圾回收

GC(分代收集算法)垃圾回收JVM在进行GC时,并非每次都对上面三个内存区域一起回收,大部分时候回收的都是指新生代。因此GC按照回收的区域又分了两种类型, 一种是普通GC(Minor GC),一种是全局GC(major GC or Full GC)。MinorGC 和Full GC的区别普通GC(minor GC):只针对新生代区域的GC,指发生在新生代的垃圾回收动作,因为大多数Java对象存活率都不高,所以Minor GC非常频繁,一般回收速度也比较快。全局GC(major GC or Full

2021-03-22 16:00:56 1139 1

原创 深入理解JVM中的栈和堆

深入理解栈栈又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把 另一端称为栈底。其特性是先进后出。栈是线程私有的,生命周期跟线程相同,当创建一个线程时,同时会创建一个栈,栈的大小和深度都是固定的。方法参数列表中的变量,方法体中的基本数据类型的变量和引用数据类型的引用都存放在栈中,成员变量和对象本身不存放在栈中。运行时,成员函数的局部变量引用也存放在栈中。栈的变量随着变量作用域的结束而释放,不需要jvm垃圾回收机制回收。栈

2021-03-21 22:46:25 792

原创 初探JVM(JVM入门)

JVM初探1、JVM的位置及体系结构JVM的位置JVM的体系结构本地方法接口:JNI(Java Native Interface)2、堆(Heap)和栈(Stack)JAVA在程序运行时,在内存中划分5片空间进行数据的存储。分别是:1:寄存器。2:本地方法区。3:方法区。4:栈。5:堆。栈(Stack)内存用于存放基本类型的变量 (8种) 和对象的**引用变量(注意是引用变量)**以及实例的方法,用完就消失(栈的特性,先进后出)。当在一段代码块中定义一个变量时,java就在栈中为这个

2021-03-21 22:39:28 147

原创 Java线程池工作原理、拒绝策略以及自定义线程池详解

线程池为什么用线程池线程池做的工作主要是控制运行的线程数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量,超出数量的线程排队等候,等其他线程执行完毕,再从队列中取出任务来。主要特点为:线程复用、控制最大并发数,管理线程。降低资源消耗,通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度,当任务到达时,任务可以不需要等到线程创建(已经创建好了)就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的

2021-03-20 21:12:33 489

原创 线程池预热之Callable

Callablecallable和Runnable的区别是callable可以有返回值,也可以抛出异常的特性,Callable实现多线程: 将实现Callable接口的实现类丢尽FutureTask 中,然后再将futureTask放进Thread类中,用到了适配者模式,面向接口的编程(参数都是接口,因为一个类可以实现多个接口,因此实现了其接口的类都有作为参数)。​ 注意:多个线程抢一个FutureTask,只计算一次call里的内容,想要计算多次需要起多个FutureTask。public c

2021-03-20 21:06:40 776

原创 AQS及ReentrantLock的底层原理

写在前面,本文受启与养兔子的大神,并在他文章的基础上添加了一些自己的理解。AQS(Abstract Queued Synchronzied)AQS的底层其实就是 “操作系统基础” 中的状态量和锁的V-P操作。AQS就是JDK中为“线程同步”提供的一套基础工具类,其实就是一个类而已,其上文讲到的同步组件(CountDownLatch,CyclicBarrier,Semaphore)(因此AQS就成了非常重要的一个知识点,因为基于它可以写出JAVA中的很多“锁”类。比如此文要分析的ReentrantLoc

2021-03-20 11:29:57 311

原创 阻塞队列(BlockingQueue)实现生产消费模式并手写一个阻塞队列

阻塞队列(BlockingQueue)什么是阻塞队列?阻塞队列 是一种数据结构,它是一个队列,可以存放0到N个元素。我们可以对这个队列执行插入或弹出元素操作,弹出元素操作就是获取队列中的第一个元素,并且将其从队列中移除;而插入操作就是将元素添加到队列的末尾。当队列中没有元素时,对这个队列的弹出操作将会被阻塞,直到有元素被插入时才会被唤醒;当队列已满时,对这个队列的插入操作就会被阻塞,直到有元素被弹出后才会被唤醒。在线程池中,往往就会用阻塞队列来保存那些暂时没有空闲线程可以直接执行的任务,等到线程空闲之

2021-03-19 21:59:07 251

原创 Condition的signal()和Synchronized的notiy()的区别,一文弄懂!

Condition的signal()和Synchronized的notiy()的区别,一文弄懂!Condition中的 await() 方法相当于 Object 的 wait() 方法,Condition中的 signal() 方法相当于Object的notify()方法,Condition中的 signalAll() 相当于Object的notifyAll()方法。不同的是,Object中的这些方法是和同步锁捆绑使用的;而Condition是需要与互斥锁/共享锁捆绑使用的。Condition它

2021-03-19 18:59:59 487

原创 Synchronized 与Lock(ReentrantLock)区别

Synchronized 与Lock(ReentrantLock)区别:原始构成sync 是关键字属于JVM层面,monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象,只有在同步代码块或方法中才能调用wait/notify等方法)Lock 是具体类(JUC包下的)是API层面的锁。使用方法:synchronized 不需要用户去手动释放锁,当synchronized代码执行完成后系统会自动让线程释放对锁的占用

2021-03-19 18:53:39 258

空空如也

空空如也

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

TA关注的人

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