多线程学习笔记
进程:正在运行的程序,独立完成一个功能。
线程:组成进程的一部分。
- 单线程
- 多线程 每个功能对于CPU的独立执行路径,就是线程。 建立程序单独的执行路径
Run,start创建新线成
Thread:所有的线程都是Thread对象。
三种实现方法:
extend Thread,
implements Runnable, 可以实现多继承,线程,任务解耦合。
implements callable ,可以有返回值,可以爆出异常。
线成状态:
1.新建状态:new
new Thread();
2.运行状态:Runnable
start().
3.阻塞状态Blocked
由系统决定,和程序无关
4.无限等待,waiting
需要唤醒
5.时间休眠,Timed_waiting
自己起来
6.死亡状态:Terminated
运行结束、
线成池:缓冲池,因为创建,销毁对系统开销比较大。
ExecutorService es = Executors.newFixedThreadPool(2);
es.submit(Runnable task);
线程共享数据安全:
1同步技术,线程安全速度就会慢
同步代码块:
synchronized(任意对象){
线程要操作的共享数据
}
对象:其实就是同步锁,没有锁的线程不能执行,只能等
1。判读同步锁是否有?
2。获取锁,进入同步中,执行逻辑
3。其他线程进来?不好意思没有锁了,不让执行
4。出同步,释放锁。
同步方法:在方法前加synchronize,对象锁就是this
static 方法,对象锁是本类.class
synchronize出现异常,锁没法释放。
使用lock接口来替换》
ReentrantLock
lock.lock();
lock.unlock();
synchronized:同步锁嵌套,容易导致死锁。
等待唤醒机制::线程通信案例
实现程序的交替
r代表锁:
r.wait() r.notify();