自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LinkedHashMap浅谈

在大多数情况下,只要不涉及线程安全问题,Map基本上都使用HashMap,不过HashMap有一个问题,就是HashMap内部是无序的,在查找时有时候需要耗费很大的性能LinkedHashMap继承自HashMap,在HashMap的基础上,通过维护一条双向链表,解决了HashMap不能随时保持遍历顺序和插入顺序一致的问题。在实现上,LinkedHashMap很多方法都直接继承自HashMap,仅为维护双向链表重写了部分方法LinkedHashMap底层源码分析LinkedHashMap继承自Hash

2020-09-17 19:50:36 286

转载 反射及JDK代理

反射首先我们先理解反射机制Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性,这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制Java反射提供的功能在运行时判断任何一个对象所属的类在运行时构造任何一个类的对象在运行时判断任何一个类所具有的成员变量和方法在运行时调用任何一个对象的成员变量和方法生成动态代理深入理解反射机制反射中包含了“反”,那么就先知道什么是正射一般情况下,我们使用某个类

2020-09-14 17:57:15 345 1

原创 排序算法

冒泡算法冒泡算法的基本思想是:比较相邻的元素,如果第一个比第二个大,就交换他们两个对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这一步做完后,最后的元素会是最大的数针对所有的元素重复以上的步骤,除了最后一个冒泡排序代码:class Solution {public: vector<int> bubblingSort(vector<int> nums) { for (int i = 0; i < nums.size() - 1; i++)

2020-09-11 22:53:35 281

原创 可重入的独占锁——ReentrantLock

ReentrantLock是Java.util.concurrent.locks包中的一个类,是独占锁,它是基于AQS实现的ReentrantLock与synchronized的区别Synchronized由编译器去保证加锁和释放锁,ReentrantLock需要手动加锁和释放锁ReentrantLock可以指定是公平锁还是非公平锁,synchronized只能是非公平锁ReentrantLock提供了一个Condition类,用来实现唤醒特定的线程,synchronized要么随机唤醒一个线程,

2020-09-11 18:10:11 197

原创 建造者模式

建造者模式,又名生成器模式,是一种对象构建模式,它可以将复杂对象的建造过程抽象出来。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节建造者模式主要包含四个角色:Product(产品角色):一个具体的产品对象Builder(抽象建造者):创建一个Product对象的各个部件指定的抽象接口ConcreteBuilder(具体建造者):实现抽象接口,构建和装配 各个部件Director(指挥者):构建一个使用Builder

2020-09-07 11:34:10 85

原创 工厂模式

工厂模式是Java最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂模式使一个类的实例化延迟到其子类一、简单工厂模式实例化对象的时候不再使用new Object()形式,可以根据用户的选择条件来实例化相关类。对于客户端来说,去除了具体的类的依赖,只需要给出具体实例的描述给工厂,工厂就会自动返回具体的实例对象二、工厂模式对于简单工厂模式,如果需要

2020-09-06 21:50:03 218

原创 HTTP常用方法及状态码

1.HTTP常用方法1.1 GET:获取资源GET本质就是发送一个请求来获取服务器上的某一资源。资源通过HTTP头部和呈现数据返回给客户端1.2 HEAD:获取报文首部HEAD和GET本质是一样的,区别在于HEAD不含呈现数据,而仅仅是HTTP头部信息,一般常用于确认URL的有效性及资源更新的日期时间1.3 POST:传输实体主题POST向服务器提交数据补充:GET和POST的区别:GET提交的数据会放在URL之后,以?分割URL和数据,参数之间以&相连,POST方法是把提交的数据

2020-09-05 12:45:46 294

原创 MVCC相关

1.MVCC概念MVCC指的是多版本控制,指的是一种提高并发的技术,在多版本控制中,只有写写之间相互阻塞,其他三种操作都可以并发执行,这样大幅度提高了InnoDB的并发度。在内部实现中,InnoDB通过undo log保存每条数据的多个版本,并能够找回数据历史版本提供给用户读MYSQL的InnoDB存储引擎默认事务隔离级别是RR(可重复读),是通过“行级锁+MVCC”一起实现的,正常读的时候不加锁,写的时候加锁,而MVCC的实现依赖:隐藏字段、Read View、Undo log1.1.隐藏字段In

2020-09-04 12:52:15 352

原创 如何让多线程按顺序执行

方法一:在子线程中通过join()方法指定顺序通过join()方法使当前线程“阻塞”,等待指定线程执行完毕后继续执行,比如在线程thread2中,加上一句thread1.join(),其意义在于,当前线程2运行到此行代码时会进入阻塞状态,直到线程thread1执行完毕后,线程thread2才会继续运行,这就保证了线程thread1与线程thread2的运行顺序方法二:在主线程中通过join()方法指定顺序上面我们是在子线程中指定join()方法,我们还可以在主线程中通过join()方法让主线程阻塞等待

2020-09-03 16:27:25 3047

原创 浏览器中输入一个网址后全部的执行过程

过程包括:域名解析->建立TCP连接(三次握手)->发起http请求->服务器响应http请求,浏览器得到html代码->浏览器解析html代码,并请求html代码中的资源->浏览器对页面进行渲染呈现给用户域名解析浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有且没有过期,则解析到此结束如果浏览器自身的缓存中没有找到对应的条目,那么浏览器会搜索操作系统的DNS缓存,,如果找到且没有过期则停止搜索解析到此结束如果操作系统的DNS缓存也没有找到,那么

2020-08-27 23:57:54 425

原创 操作系统

1.用户态和内核态内核态:操作系统管理程序运行的状态,执行的是特权指令(特权指令是只只能由操作系统执行的指令,包括启动I/O设备、设置时钟、控制中断屏蔽位、清内存等)用户态:用户程序运行时的状态,处于第三级特权,执行的是非特权指令用户态到内核态的转换主要是通过:系统调用,异常,中断内核态到用户态的转换主要是通过:设置程序状态字(程序状态字又称PSW,主要用来控制指令执行顺序并保留和指示与程序有关的系统状态,实现程序状态的保护和恢复)2.中断中断是指CPU对系统中或系统外发生异步事件的响应,异

2020-08-27 23:02:39 582

原创 并发编程基础

1.并发编程的优缺点优点充分利用了多核CPU的计算能力:通过并发编程的形式可以将多核CPU的计算能力发挥到了极致(因为在一个线程中,还有等待输入等操作),性能得到提升缺点并发编程的目的就是为了提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提高程序运行速度的,而且并发编程可能会遇到比如:内存泄漏、上下文切换、线程安全、死锁等问题2.并发编程的三要素是什么并发编程的三要素:原子性:原子性指的是要么一个或多个操作全部执行成功,要么全部执行失败,是一个不可分割的整体,具体到计算机,就是

2020-08-26 20:45:07 173

原创 浅谈ConCurrentHashMap

在JDK1.7中:ConCurrentHashMap的底层采用的是segments+HashEntry数组,segment继承了ReentrantLock,每个数组都有一个锁,叫做锁分段在JDK1.8中:ConCurrentHashMap的底层是:散列表+红黑树,与hashMap是一样的它支持高并发的访问和更新,它是线程安全的检索操作不用加锁,get方法是非阻塞的key和value都不允许为nullConcurrentHashMap的底层实现重要的成员变量private transi

2020-08-22 17:39:19 343

原创 操作系统——同步问题

1.进程中线程同步的四种常用方式临界区:一种代码段,在其中可能发生多个线程共同改变变量、读写文件等操作,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他视图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占,临界区调度原则:同一时间临界区内仅有一个线程执行,如果有若干线程请求进入空闲临界区,一次 仅允许一个线程进入进入临界区的线程必须在有限时间内退出,以保证其他线程能进入该临界区如果线程不能进入临界区,应让出CPU,避免出现忙等现象从线

2020-08-22 16:10:08 385

原创 计算机网络——什么是半连接队列

服务器第一次收到客户端的SYN之后,就会处于SYN_RCVD(同步已接收)状态,此时双方还没有完全建立连接,服务器会把此种状态下请求连接放在一个队列里,我们把这种队列称为半连接队列。SYN-ACK重传次数服务器发送完SYN-ACK包,如果未收到客户端确认包,服务器进行首次重传,等待一段时间仍未收到客户端确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。每次重传等待的时间不一定相同...

2020-08-21 19:34:48 1516

原创 AQS浅谈

AQS是抽象同步队列AbstractQueueSynchronizer的简称,AQS定义了一套多线程访问共享资源的同步框架,AQS并不实现任何同步接口,它提供了一些可以被具体实现类直接调用的一些原子操作方法,AQS同时提供了互斥模式和共享模式两种不同的同步逻辑,一般情况下,子类只需要根据需求实现其中一种模式,当然也有同时实现两种模式的同步类,许多类都依赖于它,如reentrantLock等AQS的工作机制:AQS的等待队列是基于链表实现的FIFO的等待队列,队列每个节点只关心其前驱节点的状态,线程唤醒时只

2020-08-21 18:14:06 204

原创 HTTP和HTTPS

1.HTTP和HTTPS1.1 HTTPHTTP:HTTP称为超文本传输协议,是互联网上应用最广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP协议是以明文方式发送信息的,如果截取了Web浏览器和服务器之间的传输报文,就可以直接获得其中的信息HTTP原理:客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP来完成的,建立连接后,客户机发送一个请求给服务器,该请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息,包括请求修

2020-08-17 23:53:37 248

原创 计算机网络——域名系统

1.因特网有了IP地址,为什么还需要域名我们知道,在电话网上使用的一连串的电话数字号码不好记,而具体的单位名称或姓名就容易记,同样,用点分十进制的方法表示一个IP地址确实也不好记,因此设计用名字来代替点分十进制的数字会更加符合我们实际2.域名系统DNS因特网的域名系统DNS是一个分布式数据库联机系统,采用客户机/服务器应用模式,客户机可以通过域名服务程序将域名解析到特定的IP地址,域名服务程序在专设的节点上运行,常将该节点称为域名服务器(DNS)2.1域名结构TCP/IP采用层次型命名的方法,域名

2020-08-17 00:44:56 621

原创 ArrayList底层原理

ArrayList是抽象类AbstractList的子类,实现了List接口、RandomAccess(随机访问)等接口ArrayList的底层主体就是一个Object数组,对ArrayList的所有底层操作就是基于数组实现的1.ArrayList的线程安全性对ArrayList进行添加操作的时候是分两个步骤进行的,即第一步先在object[size]的位置上存放需要添加的元素,第二步就是将size的值增加1,由于这个过程在多线程的环境下是不能保证具有原子性的,因此ArrayList在多线程的环境

2020-08-16 16:51:03 3946 1

原创 MySQL面试题——存储引擎

存储引擎其实就是一套文件系统,关于如何实现存储数据,如何为存储的数据建立索引以及支持增删改查操作可以使用show engines;命令来查看MySQL支持的存储引擎使用==show variables like ‘%storage_engine’==来查看默认的存储引擎,可以看到目前MySQL支持的默认存储引擎是InnoDB1.MyISAMMyISAM存储引擎是MySQL5.5版本之前的默认存储引擎MyISAM类型的表支持三种不同的存储结构:静态型、动态型、压缩型静态型(fixed):就是

2020-08-16 14:26:36 397

原创 Java并发编程面试题——锁

1.乐观锁和悲观锁乐观锁和悲观锁是在数据库中引入的名词,但是在并发包锁里也引入了类似的思想1.1 悲观锁悲观锁是指对数据被外界修改持保守态度,认为数据很容易被其他线程修改,所以在数据被处理前进行加锁,并在整个数据处理过程中,使数据处于锁定状态。悲观锁的实现往往依靠数据库提供的锁机制,即在数据库中,在对数据记录操作前给记录加排它锁。再比如Java里面的同步原语synchronized关键字的实现也是悲观锁1.2 乐观锁乐观锁是相对于悲观锁来说的,它认为数据在一般情况下不会造成冲突,所以在访问记录前

2020-08-15 23:41:20 305

原创 Java并发编程面试题——synchronized的底层实现

synchronized实现原理synchronized代码块:首先我们先建立一个synchronized同步语句块:public class SynchronizedTest { public void method() { synchronized(this) { System.out.println("synchronized");然后对其进行反编译:monitorenter每个对象有一个监视器锁(monitor),当monitor被占用时就会处于锁定状态,线程执行moni

2020-08-15 17:42:19 146

转载 HTTPS加密过程

为什么需要加密因为htpp的内容都是明文传输的,明文数据会经过中间代理服务器、路由器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,所以我们需要对信息进行加密使用对称加密首先来了解一下对称加密:对称加密就是发送方和接收方都使用同一个密钥,那么我们可以使用对称加密技术对我们传输的信息进行加密吗如果通信双方都各自持有同一密钥,且没有人知道,这两方的通信安全当然是可以被保证的,然而最大的问题就是这个密钥怎么让传输的双方知道,且同时不被别人知道,直接传输公钥是不现实的,因为在传输公钥也是

2020-08-15 11:40:36 190

转载 代理模式

1.代理模式代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另外一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。通俗来说,就是为一个对象提供一个代理以控制对这个对象的访问代理模式的类图如下:1.1 静态代理如果目标类中所有的方法,我们已经知道,而我们需要对目标类中的某些方法进行增强,可以使用静态代理,实现静态代理方式有继承法和聚合方法继承法:代理类直接继承被代理类,实现其原有方法,并添加一些额外的功能聚合方法:代理类实

2020-08-14 16:11:59 117

原创 TCP协议

TCP和UDP的区别TCP是面向连接的,UDP是面向非连接的,即在发送数据前不需要建立通信TCP提供可靠服务,UDP无法保证TCP面向字节流,UDP面向报文TCP只支持一对一通信,UDP支持一对多和一对一通信TCP数据传输慢,UDP数据传输快,UDP适用于短距离传输TCP和UDP的应用场景TCP:适用于邮件,远程登陆,文件传输等对准确性要求较高的地方UDP:及时通信,比如QQ,网络电话等报文和字节流的区别字节流:发送次数和接受次数可以不相同,比如向水池中倒入了20盆水,但是开水

2020-08-12 17:46:15 204

原创 LinkedList源码分析

LinkeList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而修改慢的特点LinkedList的主体是Node<E>,Node节点内部具有三个属性:LinkedList中有三个比较重要的字段:size:表示数组中元素的个数first:头节点引用last:尾节点引用LinkedList重载了两个构造函数:一个是无参构造函数,一个是传入外部集合的构造器,与ArrayList不同的是:LinkedList没有指定初始大小的构造器添加元素

2020-08-11 19:47:15 109

转载 HashSet源码分析

HashSet是Set接口的实现类,它的内部主体实际上就是一个HashMap,在HashSet中,元素都存到HashMao键值对的Key上面,而Value是有一个统一的值:private static final Object PRESENT可以看到,HashSet的无参构造函数就是直接new一个HashMap,并使用默认初始容量为16和负载因子为0.75f更加详细的源码解读...

2020-08-11 15:06:32 87

原创 单例模式

单例模式的定义:确保一个类只有一个实例,该类负责创建自己的对象,同时确保只有单个对象被创建并且提供一个全局的访问点,外部通过这个访问点来访问该类的唯一实例,这里的全局实际上指的就是静态字段那么我们为什么要用单例模式呢?在我们系统中,有一些对象其实我们只需要一个,比如说:线程池、缓存、对话框等,事实上,这一类对象只能有一个实例,如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致的结果,单例模式是为了避免重复生成同一实例对象而产生的一种模式为什么不适用全局

2020-08-11 14:40:14 131

原创 HashTable底层实现

HashTable是继承与Dictionary类,实现了Map接口,HashTable的主体还是Entry数组HashTable的默认容量大小为11,负载因子为0.75HashTable的主要方法的源码实现逻辑,与HashMap中非常相似,有一点重大区别就是所有的操作都是通过synchronized锁保护实现的,只有获得了对应的锁,才能进行后续的读写操作put()方法我们可以看到,HashTable的put方法使用synchronized修饰,也就是说当使用put方法时,必须要获取HashTab

2020-08-10 02:12:49 4547 2

原创 MySQL面试题——数据库优化问题

1.SQL优化1.1如何定位及优化SQL语句的性能问题对于低性能的SQL语句的定位,最重要也是最有效的办法就是使用执行计划,MySQL提供了explain命令来查看语句的执行计划执行计划一般包含下面几个字段的信息:id:表示一个查询中各个子查询的执行顺序,id相同则执行顺序由上至下,id不同,id值越大优先级越高,越先被执行,id为null时表示一个结果集,不需要使用它查询,常出现在union等查询语句中select_type:每个子查询的查询类型,一些常见的查询类型为:table:查询的

2020-08-10 00:26:18 382

原创 索引失效问题

没有查询条件,或者查询条件没有建立索引对索引列进行运算导致索引失效,即对索引列进行运算包括(+,-,*,/,!等)like时百分号(%)在前面对于联合索引,没有遵循最左匹配原则字符型字段为数字时where条件里不添加引号...

2020-08-09 23:22:13 130

原创 MySQL面试题——常用的SQL语句

1.SQL语句主要分为哪几类1.数据库定义语言DDL,包括CREATE,DROP,ALTER,即对逻辑结构有操作的,其中包括表结构,视图和索引2. 数据库查询语言DQL,以select为关键字,各种简单查询,连接查询等都属于DQL3. 数据操纵语言DML,包括INSERT,UPDATE,DELETE4. 数据控制功能DCL,主要对数据库安全性,完整性等有操作,可以简单的理解为权限控制等2.SQL约束有哪几种NOT NULL:用于控制字段的内容一定不能为空UNIQUE:控制字段内容不能重复,一

2020-08-09 17:59:46 2085 1

原创 Java并发编程面试题——volatile关键字

1.volatile关键字介绍1.1内存模型的相关概念计算机在执行程序时,每条指令都是在CPU中执行,而在执行指令过程中,就会涉及到数据的读取和写入的问题,由于程序运行过程中的临时数据是存放在主存中的,这时就存在一个问题,由于CPU执行速度很快,而从内存中读取数据和向内存中写入数据的过程跟CPU指令执行的速度比起来要慢得多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度,因此在CPU里面就有了高速缓存也就是当程序在运行过程中,会将运算所需要的数据从主存复制一份到CPU

2020-08-09 17:22:09 294 1

原创 MySQL面试题——锁机制

1.MySQL的锁机制当数据库有并发事务的时候,可能会产生数据不一致,这时候就需要一些机制来保证访问的次序,锁机制就是这样的一个机制2.隔离级别与锁的关系在未提交读级别下,读取数据不需要加共享锁在提交读级别下,读操作需要加共享锁,但是在语句执行完以后释放共享锁在重复读级别下, 读操作需要加共享锁,但是在事务提交之前并不释放共享锁,也就是必须等待事务执行完毕以后才释放共享锁在可串行化下,该级别锁定整个范围的键,并一直持有锁,直到事务完成3.按照锁的粒度分数据库锁有哪些在关系型数据库中,可以

2020-08-08 17:16:45 1640

原创 HashMap浅谈

HashMap主体HashMap中的主体就是一个数组,其中数组中的每一个元素就是一个链表:hashCode()方法HashMap中的hashcode()方法:对于Objects.hashCode(key)这个调用,得解释一下,它实际上就是调用key的hashCode方法,Objects类就是一个工具类,Objects中的hashCode源码如下:要注意区分:Key自带的hashCode()函数和HashMap中的hashCode()函数(即上面这段代码),前者是产生Key对象的hashcod

2020-08-06 17:57:29 126

原创 MySQL面试题——事务的ACID四大特性

原子性原子性是指一个事务是一个不可分割的工作状态,其中的操作要么都做,要么都不做一致性一致性是指事务执行前后,数据处于一种合法的状态隔离性隔离性是指多个事务并发执行的时候,事务内部的操作是与其他事务是隔离的,并发执行的各个事务之间不能互相干扰持久性持久性是指事务一旦提交,它对数据库的改变就应该是永久性的MySQL怎么保证一致性这个问题分为两个层面来说:从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID这四大特性之中,一致性是目的,原子性、隔离性、持久性是手段,

2020-08-06 14:13:39 583

原创 MySQL面试题——聚簇索引和非聚簇索引

1.聚簇索引和非聚簇索引的概念1.1聚簇索引将数据存储与索引放到了一块,找到了索引也就找到了数据,当表有聚簇索引时,它的数据实际上存放在索引的叶子页上,也就是B+树的叶子节点上,因为数据行不能存在两个地方,所以一个表只能有一个聚簇索引,在InnoDB中通过主键聚集数据,如果没有定义主键,InnoDB会选择一个唯一的非空索引代替。如果没有这样的索引,InnoDB会隐式定义一个主键来作为聚簇索引1.2非聚簇索引将数据存储与索引分开,索引结构的叶子节点指向了数据的对应行,在非聚簇索引中,索引中的逻辑顺序并

2020-08-05 22:33:16 3030 1

原创 sleep()和wait()有什么区别

两者都可以使线程进入阻塞态区别:所属类不同:sleep属于Thread类,wait属于Object类是否释放锁:sleep不释放线程所拥有的监视器资源,而wait会把监视器资源释放用法不同:wait()方法通常用于线程间的交互和通信,sleep通常用于暂停执行用途不同:wait()方法被调用后,如果没有设置等待时间,线程不会自动苏醒,需要别的线程调用共享变量的notify()或notifyAll()方法。sleep()方法在等待时间到了之后,会自动苏醒...

2020-08-05 20:48:41 152

原创 2020-08-05

1.Java中用到的线程调度算法在运行池中,会有多个处于就绪状态的线程在等待CPU,Java虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权有两种调度模型:分时调度模型和抢占式调度模型分时调度模型:让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片抢占式调度模型:Java虚拟机采用抢占式调度模型,抢占式调度模型是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的优先级相同,那么随机选择一个线程,使其占用CPU2.线程调度策

2020-08-05 17:36:30 147

原创 Java并发编程面试题——阻塞态有哪几种

阻塞的情况分为三种:等待阻塞:运行状态中的线程**wait()**方法,JVM会把该线程放入到等待队列中,使本线程进入到等待阻塞状态同步阻塞:线程在获取synchronized同步锁失败(因为锁被其他线程占用),则JVM会把该线程放入锁池中,线程处于同步阻塞状态其他阻塞:通过调用线程的sleep()或join()或发出I/O请求时,线程会进入到阻塞状态...

2020-08-05 17:02:57 1865

空空如也

空空如也

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

TA关注的人

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