Properties
该类主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很多变量是经常改变的,为了方便用户的配置,能让用户够脱离程序本身去修改相关的变量设置。
就像在Java中,其配置文件常为.properties文件,是以键值对的形式进行参数配置的。
key和value都是String类型的数据
常作于配置文件使用
创建一个资源文件夹source Folder-->新建File文件 db.properties-->编写-->读取
Collections
Collections 和 Arrays 很像
操作容器的工具类
Collection 和 Collections之间的区别
void sort(List)//对 List 容器内的元素排序,按照升序进行排序
void shuffle(List) //对 List 容器内的元素进行随机排列
void reverse(List) //对 List 容器内的元素进行逆续排列
void fill(List, Object) //用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)//采用折半查找的方法查找特定对象
HashMap线程不安全的问题:
1.Hashtable
2.synchronizedMap(Map m) 返回由指定映射支持的同步(线程安全的)映射。
3.java.util.concurrent 类 ConcurrentHashMap 线程安全的哈希表 ---推荐
ArrayList
HashMap
必须会灵活使用
Thread
线程: Thread
多线程: 多任务,多条路径同时执行
进程:对系统而言指任务|程序,每个进程都有自己独立的代码和运行空间,进程之间切换消耗大,进程是资源分配的最小单位
线程:一个进程包含1~n多个线程 ,一类共享进程的资源,每个线程都是运行栈和程序计数器,线程之间切换消耗小,轻量级的进程,cpu调用的最小单位
进程和线程都存在的状态: 新生 就绪 运行 阻塞 终止
学习的重点:
1.多线程的开启方式 ***
2.线程状态 **
3.线程安全 ***
一个cpu统一时刻只能做一件事,线程之间切换快,达到多线程的效果
创建线程:
1.继承Thread类,重写run()方法
run()定义线程体
start() 开启线程
2.实现Runnable接口,重写run()方法 ---推荐
3.实现Callable接口,重写call()方法:了解
开启线程的第二种方式:
实现Runnable接口,重写run()方法+start()
优点:
避免单继承的局限性
实现资源共享
第三种开启线程的方式
实现Callable接口 + 重写call()方法
1) call() 可以有返回值
2) call() 抛出异常
线程状态
新生: new Thread()
就绪: start(),就绪状态的线程会进入到就绪队列中,等待cpu调度
运行: 当cpu非配时间片给线程,这个线程就会进入运行状态开始运行
阻塞: sleep()...
终止: 线程结束
注意:如果一个线程进入阻塞状态,阻塞状态解除也无法直接进入运行状态,会进入就绪状态
如果一个线程已经死亡,无法恢复就算重新开启线程也不是原来的哪一个
如果进入终止状态:
1)正常执行完毕2)添加外部表示判断***3)destroy() | stop()
如果进入就绪状态:
1)start()
2)阻塞状态解除
3)yield()
4)线程切换
如果进入阻塞状态:
1)sleep()
2)wait()
3)join()
4)IO 操作
sleep(ms) 线程睡眠.. (抱着资源睡觉)
1)模拟网络延迟
2)放大发生问题的可能性
线程休眠期间会进入阻塞状态,让出cpu的资源,但是不会释放对象锁|资源
yield() 礼让线程
会让出cpu的资源,让线程直接进入就绪状态
join()方法 插队
被插队的线程进入阻塞状态
获取线程状态的方法
getState() 返回线程的枚举类型状态值
线程的优先级: 1~10 1最小 10最大 默认5
int getPriority() 返回线程的优先级。
void setPriority(int newPriority) 更改线程的优先级。
无法控制线程执行顺序,但是可以增加|讲课执行的可能性
线程安全
线程安全:当多线程,同时操作,同一份资源的时候有可能存在线程不安全问题
控制线程安全: 锁-->同步锁 synchronized
同步方法:
静态方法
成员方法
同步块
synchronized(this,类,资源){
内容...
}
注意:
锁要锁不变的内容,才能锁住
锁的范围太大,效率低,锁的范围太小,锁不住
双重锁 double check: 同步最小的范围,提高效率
单例:懒汉式线程不安全
锁静态方法相当于锁类,可以使用同步块
三种锁的:
控制线程安全:
锁类: 锁住了类的所有内容-->锁住了这个类的所有对象,锁住了一个对象中的所有资源,如果只想要锁一个对象建议去所对象
锁对象:每个对象只有一把锁,对象锁释放,别人就获取不了
对象中的所有资源都锁住了,只想要锁某一个资源,推荐锁资源
锁资源: 成员属性
自定义引用数据类型的对象地址永远不变