java 线程
进程与线程
进程: - 指一个内存中运行的应用软件,每个进程都有一个独立内存空间。
线程: - 进程中的执行路径,每个进程至少一个线程,共享一个内存空间。
线程调度
分时调度
- 所有线程轮流使用CPU使用权,平均分配占用时间。
抢占式调度
- 让优先级高的线程使用CPU,如果优先级相同随机选择,java使用这种模式。
- CPU线程切换速度快,看上去像同时运行。不能提高运行速度,但是某些场合下增加了效率。
同步与异步
同步:排队执行,效率低安全
异步:同时执行,效率高不安全
并发与并行
并发:指两个或多个事件在同一个时间段内 发生。
并行:指两个或多个事件在同一个时刻发生(同时发生)。
Thread继承
每个线程都有自己的栈空间,公用一份堆内存。
继承Thread的子类需重写run方法
run方法不直接调用,而是调用start方法来启动。
Runnable实现
-
创建一个任务对象
-
创建一个线程,并为其分配一个任务
-
执行线程
与继承Thread相比的优势:
- 通过创建任务,然后给线程分配的方式来实现多线程,更适合多个线程同时执行相同任务的情况;
- 可避免单继承的局限性。(可多实现)
- 任务与线程分离。提高程序健壮性
- 后续的线程池技术,接受runnable类型的任务,不接受Thread类型的线程。
Thread类
.currentThread() 可以获取当前线程
.currentThread().getName()获取线程名字
Thread.sleep()指定时间休眠
线程阻塞:需要比较消耗时间的操作
线程中断:由线程自身决定。需做标记。
守护线程:用于守护‘用户线程’。当最后一个用户线程结束,所有守护线程自动结束。 .setDaemon(true)
线程安全与不安全
- 同步代码块
synchronizez关键字
格式: synchronized(锁对象){
}
看同一把锁
- 同步方法
在方法的public后面加上synchronized关键字
- 显式锁
同步代码块和同步方法都是隐式锁
Lock类 子类:ReenntrantLock
lock方法,unlock方法 自己锁和解锁
- 公平锁与不公平锁
ReenntrantLock(fair:true)则创建了公平锁,谁排队先抢到谁占有
-
线程死锁
-
多线程通信
wait()睡眠方法,notify()唤醒方法
线程状态
Thread.state()
new
Runnable
Blocked
Waitting
TimedWaitting
Terminated
浙公网安备 33010602011771号