2022-09

关于final

final修饰词是设置常量的意思。
倘若final了一个对象,
例如数组,则可以改变其内部值,但是不能改变其长度。
例如StringBuffer,则可以修改其内部值,让其重新指向新的地址,但是其对象不变。
也就是说final设置的常量就是让其对象不能改变,但是其对象指向的地址可以改变。

抽象类和接口

关于接口和抽象类的区别:

  1. 单继承多实现
  2. 抽象类中可以有非抽象的方法,但是接口中不能有非抽象的方法;
  3. 单继承多实现时,必须全部实现抽象方法或接口,倘若不这样就要把该类设置为抽象类;
  4. 抽象类中的变量可以各种各样的,但是接口中的变量只能为类常量
  5. 抽象类无法实例对象
  6. 倘若单继承多实现时出现了相同的方法名或变量名,想要调用则需要抽象类/接口.方法名或变量调用
  7. 抽象类是属于一种多个子类中提取其中一部分都存在相同公共的方法或变量,另一部分是子类有这个方法或变量但是其需要表达的内容不同;接口属于一种类似对于子类的约束吧,提取子类都有但需要表达不同的方法或变量。

List和Set

List和Set排序:List有序,Set无序。
List:按照插入的顺序排序的。可重复,ArrayLsit线程不安全,
Set:按照计算过后的hashcode排序。不可重复,HashSet线程不安全
倘若想要ArrayList和HashSet线程安全则可以用Collections.synchronizedList或Collections.synchronizedSet。
LinkedList:内部是链表,前一个标签指向下一个标签所以这样插入和删除的比较快,但是他查找和修改比较慢,因为他没有索引只能从头一个一个的找.
ArrayList每次扩容属于复制扩容,超过
ArrayList内部是数组,倘若创建一个长度大的ArrayList,每次都在尾部插入则效率和linkedlist一样快
ArrayList数组默认初始长度为0,第一次add时会扩容到10,随后超长则扩容1.5倍,
HashSet底层是散列表,也就是hashmap,扩容机制看下面hashmap

map

map常用就是hashmap。他是线程不安全的,也就是说hashmap在多线程的时候,可能会出现数据问题。所以也就衍生了ConcurrentHashMap,他是线程安全的,jdk1.8加了Synchronized锁,jdk1.7是分段锁
hashmap是散列表,底层是数组+链表的结构。
数组默认长度为16,当元素到达16*0.75时扩容一倍变为32
当数组下的链表长度超过8时,则数组也扩容一倍。
当链表长度为8时且数组长度到达64时,则数组下的链表转为红黑树
倘若链表的长度缩小为6时,则红黑树转为链表

类加载器和双亲委派

类加载器:bootstrapClassloader(lib里的)、ExtClassloader(lib/ext里)、AppClassloader(自定义的。我们编写的classpath)
双亲委派:向上委派:是在缓存中查找,向下委派:是在加载路径中查找

线程

线程状态

创建、就绪、运行、阻塞(放弃运行,重启则转为就绪状态)、死亡
阻塞又分为3种:
1.等待阻塞:wait
2.同步阻塞:锁(synchronized)
3.其他阻塞:sleep、join、I/O

wait、sleep、join、yield

wait会释放锁,进入阻塞状态,等待notify或notifyall来释放,重新进入就绪状态,和其他线程一同竞争cpu,主要是用来做多线程之间的线程交互
sleep不会释放锁,属于一种暂停
join,一个线程在另一个线程结束后再执行,例如线程a执行start后执行join,则a执行完再执行主线程剩下的;join(),括号里可以填写时间,寓意等待线程执行多久后再执行其他线程
yield,一个线程从运行状态转为就绪状态,重新参与cpu的竞争

并发三大特征

原子性、可见性、有序性
原子性:一旦执行不可暂停,要不全执行要不全部执行
可见性:当多线程时,一个线程中修改了某个值,则其他线程能立刻看到最新值
有序性:保证多线程并发时,执行代码的顺序
synchronized可保证原子性、可见性、有序性
volatile可保证可见性、有序性
final可保证可见性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值