1.程序 进程 线程 基本概念
-
- 同一个程序可以有多个进程
- 进程里有多个线程
- 一个程序是一个进程 里面有一些默认的线程
- main(用户线程)
- jc(守护线程) JVM分配的
- 线程和其它同属于一个进程的线程公用一个存储空间,而进程之间空间独立
- 多处理机才能真正实现多线程 单处理机只在交替执行
- 每个线程都有自己的栈和程序计数器
- JVM有两种执行多线程的方法
2.线程创建
-
- Thread类
- 自定义一个类继承Thread
- 需要重写run方法
- 调用start()方法
- 用run方法会提前执行
- 不要调用run方法 用start方法
- 用start方法会交替执行
-
-
- Runnable接口
- 写一个类继承Runnab接口
- 重写run函数
- 主函数里实例化一个这个类的对象 a
- 实例化一个Thread的对象b 把a丢到b里
3.线程优先级
-
- 其优先级范围MIN_PRIORITY(常量1)到MAX_PRIORITY(常量10)默认情况下,线程优先级是NORM_PRIORITY(常量5)
- 每个线程的优先级都是从创建它的进程那里继承下来的。
- 但是线程的优先级无法确切保证线程的执行顺序,
- set priority
- get priority
- 后台线程和用户线程
- 静态代理模式
- 好处
- 代理对象可以做很多真实对象做不了的事
- 真实对象专注做自己的事情
- 代理对象和真实对象都实现一个接口
- 代理对象的方法里创建一个真实角色 然后调用该方法
- 代理对象是Thread
- 真实对象说Runna接口
- 线程池
- 线程状态
- 创建状态 new
- 就绪状态 start yield
- 阻塞状态 sleep wait
- 运行状态 可以到阻塞或者到死亡 join可以直接插队
- 死亡状态
- sleep
- 会抛出InterruptedException
- sleep不释放锁
- 模拟网络延迟
- yield
- 线程同步
- 多个线程访问同一个对象 并且想篡改这个对象
- 那么把这些对象都丢到同一个等待池里
- 队列+锁
- 锁