java 线程

进程与线程

进程: - 指一个内存中运行的应用软件,每个进程都有一个独立内存空间。

线程: - 进程中的执行路径,每个进程至少一个线程,共享一个内存空间。

线程调度

分时调度

  • 所有线程轮流使用CPU使用权,平均分配占用时间。

抢占式调度

  • 让优先级高的线程使用CPU,如果优先级相同随机选择,java使用这种模式。
  • CPU线程切换速度快,看上去像同时运行。不能提高运行速度,但是某些场合下增加了效率。

同步与异步

同步:排队执行,效率低安全

异步:同时执行,效率高不安全

并发与并行

并发:指两个或多个事件在同一个时间段内 发生。

并行:指两个或多个事件在同一个时刻发生(同时发生)。

Thread继承

每个线程都有自己的栈空间,公用一份堆内存。

继承Thread的子类需重写run方法

run方法不直接调用,而是调用start方法来启动。

Runnable实现

  1. 创建一个任务对象

  2. 创建一个线程,并为其分配一个任务

  3. 执行线程

与继承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

posted @ 2020-11-05 17:35  森华伊芙尼  阅读(56)  评论(0)    收藏  举报