Thread线程笔记总结
线程 Thread
cpu 处理,最小处理单元
大工作 分割成若干小工作去完成
并行 多个线程 真正的 同时执行
并发 多个线程 抢一个cpu分配时间片
应用
进程
线程
多线程 多任务处理
多线程 三种实现方式
1.继承Thread类 重写run方法
2.实现Runable 接口 重写run方法
3.实现Callable接口 重写call方法
启动多线程 使用start()方法
run()是线程启动后要执行的方法
Thread的常用方法
start() 启动线程 会开启新线程 然后执行run方法
run()是执行线程所走的方法,并不启动线程
join()加入 插队 将其他线程合并到本线程中
join(时间)等待插入线程 执行的最大时间
yield()礼让 让出CPU执行的权限
阻塞状态
join(),yield()
新建-> 可执行状态-> 执行状态 -> 死亡
stop()线程的强制终止 过时了,用while(flag)替换
setPriority()优选级 设置线程执行的优先级,1-10十个级别,默认5,越大
getPriority()
getName()获取线程名称
setDaemon()设置守护线程,优选级是最低的,
当所有非守护线程结束,那么守护线程自动结束
守护线程 启动的线程默认就是守护线程
多个线程 操作同一个资源时 可能出现一个资源同时被两个线程操作 出现错误数据
同步 synchronized
异步 asynchronized
同步(锁)块
同步(锁)方法
同步的作用
在监视对象上加锁后 同一时间只允许一个线程访问
该同步块或方法,对其他非加锁的代码不限制
同步方法保证数据安全 但会牺牲部分效率
同步块 monitor
synchronized(监听器){
}
死锁问题
一个线程 需要多个资源才能正常完成
他缺失某个资源而该资源被其他线程占用
其他线程所需资源又被他所占用无法互相释放
解决方法
尽量减少多个同步方法之间的调用
线程通信
Object的方法
wait 等待 休眠当前线程 释放锁
notify 唤醒一个线程 在当前对象锁 线程池中等待的其他线程
notifyAll 唤醒所有等待线程 在线程池中等待的所有线程
wait notify 一定是在同步块中
wait 和sleep的区别
wait会释放锁 需要notify唤醒
sleep不释放锁 到时间自然醒
数据库
Oracle
sqlserver
mysql
关系型数据库
sql语言
no-sql 结构性数据 大数据
readis
结构优于关系 数据结构