- 博客(14)
- 收藏
- 关注
原创 Java中锁的分类,公平锁、乐观锁、悲观锁、可重入锁
AQS就是AbstractQueueSynchronizer抽象类,是JUC包下的一个基类,JUC下的很多内容都是基于AQS实现了部分功能,比如ReentrantLock,ThreadPoolExecutor,阻塞队列,CountDownLatch,Semaphore,CyclicBarrier等等都是基于AQS实现。AQS提供了一个由volatile修饰,并且采用CAS方式修改的int类型的state变量;其次AQS维护了一个双向链表,有head,有tail,并且每个节点都是Node对象。
2023-06-20 19:58:57
778
原创 Java中的四种引用类型
User user = new User()就是强引用,在Java中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引用。当一个对象被强引用变量引用时,它始终处于可达状态,它是不可能被垃圾回收机制回收的,即使该对象以后永远都不会被用到JVM也不会回收。:它比软引用生存期更短,对于只有弱引用的对象来说,只要垃圾回收机制一运行,不管JVM的内存空间是否足够,总会回收该对象占用的内存。可以解决内存泄露问题,ThreadLocal就是基于弱引用解决内存泄露的问题。
2023-06-20 19:44:22
709
原创 关于线程的说明
(3)interrupt方式,isInterrupt方法是获取当前线程的状态,线程默认标记状态为false,interrupt方法将标记位设置为true,interrupted方法返回当前线程状态并且归位为默认值false。wait方法会将持有锁的线程从owner扔到waitSet集合中,这个操作是在修改ObjectMonitor对象,如果没有持有synchronized锁的话,是无法操作ObjectMonitor对象的。(3)sleep方法持有锁时,执行的话,不会释放锁;wait在执行后会释放锁资源;
2023-06-20 19:31:28
81
原创 Spring入门学习
IoC 全称为 Inversion of Control,翻译为 “控制反转”控制反转的思想完全颠覆了应用程序组件获取资源的传统方式:反转了资源的获取方向——改由容器主动的将资源推送给需要的组件,开发人员不需要知道容器是如何创建资源对象的,只需要提供接收资源的方式即可,极大的降低了学习成本,提高了开发的效率。这种行为也称为查找的被动形式。所谓 IOC ,就是由 Spring的 IOC 容器来负责对象的生命周期和管理容器中对象之间的关系。
2023-06-16 16:59:14
113
原创 网络通信小结
tcp网络通信,当客户端连接到服务器端后,实际上客户端也是通过一个端口和服务端进行通讯的,这个端口是tcp/ip随机分配的。IP地址的组成=网络地址+主机地址,如192.168.11.5 (192.168.11是网络地址)(5是主机地址)端口:用于标识计算机上某个特定的网络程序(范围0-65535,即2个字节表示端口)netstat -an 可以查看当前主机的网络情况,包括端口监听和网络连接情况。2.传输前,采用“三次握手”方式,是可靠的。5.传输完毕,需释放已建立的连接,效率低。
2023-06-14 18:48:29
42
原创 线程的概念
在多线程编程,一些敏感的数据不允许多个线程同时访问,此时使用同步机制,保证数据在任何同一个时刻,最多有一个线程访问,以保证数据的完整性。1.yield:线程的礼让,让出CPU,让其他线程执行,但礼让的时间不确定,所以也不一定礼 让成功。4.当前线程在同步代码块、同步方法中执行了线程对象的wait()方法,当前线程暂停,并且释放锁。2.join:线程的插队,插队的线程一旦插队成功,则肯定先执行完插入的线程的所有任务。守护线程:一般是为各种线程服务的,当所有的用户线程结束,守护线程自动结束。
2023-06-14 18:46:30
35
原创 四种内部类的说明
5.如果外部类和匿名内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员 访问。7.如果外部类和内部类的成员重名时,默认遵循就近原则,如果想访问外部类的成员,使用 外部类名.this.成员 访问。7.内部类访问外部类成员,重名遵循就近原则,访问方式 外部类名.this.属性。(3)该类没有名字;6.外部其他类访问成员内部类(外部类对象.内部类对象.内部类成员)5.外部其他类访问静态内部类,访问方式 外部类名.内部类对象.属性。(1)成员内部类(没有static修饰)
2023-06-14 18:45:52
32
原创 Java异常说明
如果在try+catch中有return,先执行finally在执行return;Throwable是Error和Exception的父类,Exception分为编译异常(检查异常)和运行时异常。手动抛出非运行时异常,方法声明处,要配合throws声明抛出异常类型,否则编译通不过。异常处理5个关键字:try、catch、finally、throw、throws。throws声明异常,声明方法可能抛出的各种异常。语法:throw new 异常类型(异常信息)throw抛出异常,手动抛出异常。
2023-06-14 18:45:17
34
原创 Java集合框架
答:可以,LinkedList是List接口实现类,存储元素是有序的,所以元素有下标,根据下标获取元素也是支持的,但是根据下标获取元素方式跟ArrayList不同,首先确定下标值是否有效,范围是0-(元素个数-1),如果下标有效,进行二分查找。5.java8中,如果链表的长度达到8,并且数组的大小 >= 64,就会进行树化(变成红黑树),如果链表长度达到8,数组以2倍进行扩容(即链表长度达到8,进行黑化,进行黑化需要判断数组的长度是否 >= 64,大于才满足黑化的条件)线程不安全,没有实现同步。
2023-06-14 18:44:34
114
原创 继承知识点小结
3.当创建子类对象时,不管使用子类的那个构造器,默认都会调用父类的无参构造器,如果父类没有提供无参构造器,则必须在子类构造器中用super去指定使用父类的那个构造器完成对父类的初始化工作,否则编译不会通过。1.子类继承了父类所有的属性和方法,但是私有属性和方法不能在子类直接访问,要通过父类提供的公共方法去访问。8.父类构造器的调用不限于直接父类,将一直追溯到Object类(顶级父类)2.子类必须调用父类的构造器,完成对父类的初始化。9.子类最多只能继承一个父类。所有构造器的第一行都有默认的构造器。
2023-06-14 18:43:23
39
原创 泛型与String
2.方式二:先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间,如果常量池没有"hsp",重新创建,如果有,直接通过value直接指向,s2最终指向的是堆中的地址。泛型的作用:在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型;想要获取泛型的类型,通过T.getClass()获取,T是泛型。intern()方法最终返回的是常量池中的地址,s2.intern()返回的是常量池中“hsp”的地址,如果没有则在常量池创建字符串,返回字符串地址。
2023-06-14 18:42:04
196
原创 反射机制的说明
加载:将类的class文件读入内存,并为之创建一个java.lang.Class对象,此过程由类加载 器完成。类加载后内存的布局情况:类的字节码二进制数据保存到方法区,在堆中生成类的Class对象,类的字节码二进制数据引用类的Class对象。java源文件(.java)--编译--》java字节码文件(.class)--运行--》类加载(3阶段)通过类加载器获取到类的Class对象:类加载器.loadClass(类的全路径)加载---->连接(验证、准备、解析)---->初始化。
2023-06-14 18:40:57
33
原创 抽象类细节
(6)接口中的属性只能是final的,而且是public static final修饰符,比如:int a = 1;3.接口存在多态传递现象,一个类实现了一个接口,而该接口又继承了另外一个接口,那么这个类的实例可以被两个接口所引用。(3)一个类实现接口,必须实现接口的所有方法(alt+enter快速实现所有方法)(2)接口中所有的方法是public方法,抽象方法可以不用abstract修饰。(9)接口和类的修饰符是一样的,只能是 public 和默认。(4)抽象类实现接口,可以不实现接口的抽象方法。
2023-06-14 18:39:47
61
原创 this和super关键字
5.this不能在类定义的外部使用,只能在类定义的方法中使用(例如name和this.name在使用的时候,name会根据就近原则查找,而this.name直接定位属性)6.静态代码块只能直接调用静态成员(静态属性和静态方法),普通代码块(也可以说普通方法,静态是属于类级别的,普通是属于对象级别)可以调用任意成员。1.static代码块也叫静态代码块,作用是对类进行初始化,随着类的加载而执行,且只执行一次,普通代码块,每创建一个对象,就执行。(1)父类的静态代码块和静态属性(优先级一样,按定义顺序执行)
2023-06-14 18:39:34
32
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人