一、
进程是由最少一个或者多个线程组成,线程是进程的最小单位
线程是抢占式运行的。
同一个进程下的多个线程是可以数据共享的
二、并发和并行
同时发生的,但轮流交换执行叫并发
真正的一起同时执行叫并行
三、创建线程有两种方法
- 继承 thread
- 实现 Runnable
方法 getPriority 设置优先级
Sleep 设置暂停时间
注:不靠谱 开发不用
应该用锁
四、锁
当线程同时操作一个数据时容易产生抢资源的情况 容易导致数据不准确等情况
因此需要同步方法枷加锁:synchronized
两种方案:
1、同步方法
例:
public synchronized void eat () {
}
- 同步代码块
synchronized (this) {
代码
}
第一种加锁后只有一个线程能进入到方法里 其他线程先等待必须等全部结束才会释放
第二种加锁后线程在代码块外面等待,每跑一圈都会重新抢夺线程
因此第二种比较好
五、锁分类
两种:
Synchronized 为隐式锁
Lock 为显示锁
六、死锁
死锁就是当两个线程互相有对方的资源时,两个线程又不主动释放资源,就会形成僵持,形成死锁
七、生命周期
五个阶段
- 线程创建成功
- 线程可运行状态
- 线程运行状态