从0开始深入理解并发、线程与等待通知机制

1.为什么开发中需要并发编程?

(1) 加快响应用户的时间
(2) 使你的代码模块化 , 异步化 , 简单化
(3) 充分利用 CPU 的资源

2. 基础概念

2.1 进程

进程就可以视为程序的一个实例
站在操作系统的角度, 进程是程序运行资源分配(以内存为主)的最小单位。

2.2 线程

线程必须依赖于进程而存在,线程是进程中的一个实体,是 CPU 调度和分 派的基本单位,它是比
进程更小的、能独立运行的基本单位。
线程则是 CPU 调度的最小单位

2.3 CPU 核心数和线程数的关系

CPU 内核和同时运行的线程数 是 1:1 的关系
Intel 引入 超线程技术后,产生了逻辑处理器的概念, 使核心数与线程数形成 1:2 的关系

2.4上下文切换(Context switch

既然操作系统要在多个进程(线程) 之间进行调度, 而每个线程在使用 CPU 时总是要使用 CPU
中的资源,比如 CPU 寄存器和程序计数器

3.Java中的并发

3.1 线程

3.1.1线程的启动

1 . 继承Thread接口,调用start方法 
2. 实现Runnable接口 ;然后交给 Thread 调用start方法

3.1.2线程的终止

1.线程自然终止
         要么是 run 执行完成了,要么是抛出了一个未处理的异常导致线程提前结束
2. stop
暂停、恢复和停止操作对应在线程 Thread API 就是 suspend() resume() stop() 。但是这些 API 是过期的,也就是不建议使用的。
3. 中断
不建议自定义一个取消标志位来中止线程的运行
一、一般的阻塞方法,如 sleep 等本身就支持中断的检查,
二、检查中断位的状态和检查取消标志位没什么区别, 用中断位的状态还可 以避免声明取消标志
位,减少资源的消耗。
注意:处于死锁状态的线程无法被中断

3.1.3 线程的状态

Java 中线程的状态分为 6 种:
1. 初始 (NEW) :新创建了一个线程对象,但还没有调用 start() 方法。
2. 运行 (RUNNABLE) Java 线程中将就绪( ready )和运行中( running )两种 状态笼统的称为“运
行”。
线程对象创建后,其他线程 ( 比如 main 线程)调用了该对象的 start() 方法。 该状态的线程位于可
运行线程池中, 等待被线程调度选中, 获取 CPU 的使用权, 此时处于就绪状态( ready )。就绪状
态的线程在获得 CPU 时间片后变为运行中 状态( running )。
3. 阻塞 (BLOCKED) :表示线程阻塞于锁。
4. 等待 (WAITING) :进入该状态的线程需要等待其他线程做出一些特定动作 (通知或中断)。
5. 超时等待 (TIMED_WAITING) :该状态不同于 WAITING ,它可以在指定的时 间后自行返回。
6. 终止 (TERMINATED) :表示该线程已经执行完毕。
3.1.4线程的优先级
Java 线程中, 通过一个整型成员变量 priority 来控制优先级, 优先级的范 围从 1~10 ,在线
程构建的时候可以通过 setPriority(int) 方法来修改优先级,默认 优先级是 5 ,优先级高的线程分配时
间片的数量要多于优先级低的线程。
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackXiang2019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值