136-146完成
Java集合框架
Collection : List 有序,可重复的集合ArrayList, Set无序,不可重复的集合 HashSet和TreeSet, Queue代表队列ArrayDeque,PriorityQueue
Map HashMap
ArrayList 是有序的
经过证实,在删除前面的元素,后面的元素会自动往前移
线程状态
new - (调用start)就绪状态 - 堵塞钻沟通 - 运行状态 - 死亡状态
打印当前系统时间+计
什么叫每一个对象都有一个锁?锁是什么
yield和join
一个是礼让,一个是插队
线程优先级
守护线程:thead.setDaemon 虚拟机不等待 守护线程
线程同步:一种等待机制
并发---多个线程访问一个对象
队列 + 锁(synchronized) 是为了保护线程的安全
1.同步代码块:
synchronized(同步监视器){
//需要被同步的代码
}
继承Thread类的方式中,同步监视器用类.class
Runnable 方式中,同步监视器可以考虑用this
***类.class 就是唯一的对象,万物皆对象
2.同步方法 如果共享数据的代码完整的声明在了一个方法,可以将这个方法声明为同步方法。
非静态的同步方法默认就是this
静态的同步方法默认是类.class
synchronized好处:解决了线程的安全问题;弊端:性能降低
多线程的复习:
程序:一段静态的代码
进程:动态的,为操作系统调度和分配资源的最小单位
线程:一个进程中由多个线程,线程作为cpu调度和执行的最小单位
创建多线程的方法:
方式1:继承Thread
方式2:实现Runnable接口
方式3:实现Callable接口
方式4:实现线程池
继承是单一的,而实现可以多元化,推荐使用Runnable
常用的构造器和方法:
优先级:
线程的声明周期:jdk5.0之前
jdk5.0之后
NEW - RUNNABLE - BLOCKED - WAITING - TIMED_WAITING - TERMINATED
如何解决线程的安全问题
多个线程操作共享数据,就有可能出现问题
同步机制:①同步代码块 ②同步方法
jdk5.0新增:Lock接口及其实现类。
》》》11章常用类和基础API《《《
String类的理解(JDK 8.0)
1.1类的声明
final:String 是不给被继承的
Serializable 可序列化的接口。可以通过网络或本地流进行数据的传输
Comparable 凡是实现此接口的类,其对象都可以比较大小
1.2内部声明的属性:
jdk8.0
private final char value[] ; //粗存字符串的容器
jdk9.0之后
private final byte[] value;
2.字符串常量池的存储位置
字符串常量都储存在StringTable中,字符串常量池
字符串常量池不允许存放两个相同的字符串常量
字符串常量池,jdk7之前,存放在方法区;
jdk7之后,存放在堆。
3.字符串的不可变的特性
①当对字符串变量重写赋值时,需要重新指定一个字符串常量的位置进行赋值,不能再原有的位置修改;
②对现有的字符串拼接时,需要重新开辟空间保存拼接以后的字符串
③replace ,需要重新开辟空间保存拼接以后的字符串
4.String实列化的两种方式
- String s1 = "Hello"
- String s1 = new String("Hello")
String s2 = new String("Hello") 创建了几个对象 ? 两个!
5.String 的连续操作
- 常量 + 常量:结果任然在字符串常量池
- 常量 + 变量 或变量 + 变量 :都会通过new的方式创建一个新的对象,返回对2空间中此字符串对象的地址值。
- 调用字符串的intern:返回的就是字符串常量的地址值
concat():不管是常量调用还是变量调用,都会返回一个新的对象
6.构造器和常用方法
7.StringBuffer 和 StringBuilder
String : 不可变的字符序列;(底层使用char[] JDK8.0之前)
StringBuffer:可变的字符序列;JDK1.0出现;线程安全,效率低点;
StringBuider:可变的字符序列;JDK5.0出现;线程不安全,效率高点;
数组的默认长度为16,创建一个数组时,会根据”abc“ . length + 16
如果需要经常对数组增删改查,就使用 StringBuffer 和 StringBuilder
如果不用考虑安全问题就用StringBuilder
常用方法:
- 增:append()
- 删:delete(int start , int end);delete (int index)
- 改:replace(int start , int end ,String str) setCharAt(int index , char c)
- 查:charAt(int index)
- 插:insert(int index , xx)
- 长度:length()
- 反转:reverse()
8.对比三者的执行效率
StringBuilder > StringBuffer > String