并发编程-线程概念篇

一、什么是进程?

  • 进程是操作系统中资源分配的最基本单位,每个进程都有独立的内存空间。
  • 进程是操作系统对正在运行的程序的一种抽象,可以将进程看做程序的一次运行。
  • 一个进程内可以包含多个线程。

二、什么是线程?

  • 线程是操作系统调度执行的最小单位。
  • 同一个进程内的多个线程资源共享。

三、线程的状态

  • 新建状态(NEW):线程被创建,但还未执行start()。
  • 就绪状态(RUNNABLE):已经执行start()方法,等待CPU调度执行的。
  • 运行状态(RUNNING):获得CPU时间片,正在执行。
  • 阻塞状态(BLOCKED):需要获取同步资源才能继续执行,但未获得同步资源。
  • 等待状态(WAITING):执行wait()的线程。等待其它线程执行notify()、notifyAll()唤醒。
  • 超时等待(TIMED_WAITING):执行wait(long timeOut)的线程。超过等待时间后自动运行。
  • 销毁状态(TERMINATED):线程执行结束。run()、main()执行结束。

四、常用方法

1. start()

  • 开启线程,使线程进入就绪状态。
  •  属于Thread类。

2.sleep()

  • 使线程进入到超时等待(TIMED_WAITING)状态,等待超时后进入到就绪状态。
  • 会释放CPU时间片,但不会释放锁。
  • 属于Thread类.

 3.wait()

  • 使调用线程进入等待状态(WAITING),需要等待其它同资源线程调用notify()、notifyAll()唤醒进入到就绪状态竞争锁。
  • 会释放CPU时间片,并释放当前锁.
  • 需要配合synchronized同步代码块使用,因为wait()需要释放锁,所以需要先获取锁。
  • 属于Object类。因为任何的对象都可能成为锁。

 3.wait(long timeout)

  • 用线程进入到超时等待状态(TIMED_WAITING),等待超时或被notify()、notifyAll()唤醒后进入就绪状态。
  • 会释放CPU时间片,并释放当前锁.
  • 需要配合synchronized同步代码块使用,因为wait()需要释放锁,所以需要先获取锁。
  • 属于Object类。因为任何的对象都可能成为锁。

4.notify()

  • 唤醒同一共享资源,处于WAITING或TIMED_WAITING状态的某一线程,使其进入到就绪状态。
  • 并不会立刻释放锁,需要等待当前同步代码块执行完成后再释放锁。
  • 需要配合synchronized同步代码块使用。
  • 属于Object类。
  • 唤醒成功,返回true,唤醒失败返回false。
  • 常配合while使用。

5.notifyAll()

  • 唤醒同一共享资源,处于WAITING或TIMED_WAITING状态的所有线程,使其进入到就绪状态。
  • 并不会立刻释放锁,需要等待当前同步代码块执行完成后再释放锁。
  • 需要配合synchronized同步代码块使用。
  • 属于Object类。

五、什么是线程安全?

  • 多个线程操作同一代码,不会产生不确定的结果。

六、什么是线程不安全?

  • 多个线程操作同一代码,会产生不确定的结果。
  • 原因:
    1. 多个线程修改同一变量。
    2. 指令重排。
    3. 修改操作不满足原子性。
    4. 内存可见性引起线程不安全。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值