Java 线程
线程创建的两种方式
1、Runable 、 Thread
线程生命周期
新建 ——》就绪、运行、阻塞、死亡
控制线程状态
1、join,谁调用线程join,谁就等待该线程执行完才执行
2、后台线程
3、sleep,
4、yield
5、改变优先级
线程同步
同步监视器:任何线程进入同步代码块或同步方法之前,必须先获得对同步监视器的锁定
1、同步代码块
obj就是同步监视器
2、同步方法
同步监视器是this,就是该对象本身
- 更细粒度的同步锁——LOCK和Condition
线程协调之主动等待和被动唤醒
[海盗开宝箱的比喻]
- wait(),该线程放弃同步监视器的锁定,让该线程等待,直到其他线程调用该同步监视器的notify()方法或notifyAll()。
- notify(),随机唤醒在此同步监视器上等待的线程。该线程执行wait()后才可以执行被唤醒的线程。
- notifyAll()唤醒在此同步监视器上等待的线程,只有当前线程wait()后才能唤醒
Callable和Future
Callable 接口 可看做 Runable增强版
- call()方法可以有返回值
- call()可以声明抛出异常
Future用来设计成接受call()的返回值,并控制Callable的执行
线程池
线程池的创建、使用、执行任务
- 创建
- 使用
- 使用线程池执行线程任务的步骤
线程相关类
- ThreadLocal类
线程安全类,相当于每个线程都有属于自己现成的副本,可把ThreadLocal看做一个桶,每个线程只能操作自己放进去的东西,看不到别的线程存放的东西。
使用