45、软件与硬件基础:多线程编程及多处理器架构解析

软件与硬件基础:多线程编程及多处理器架构解析

1. 软件基础

1.1 Java 编程中的线程问题

在 Java 编程里,会遇到诸如丢失唤醒问题这类情况。比如,当 S 将一个调用放入队列并调用 notify() 来唤醒一个操作线程时,由于通知是异步的,会存在延迟。S 返回后又将另一个调用放入队列,此时若队列已有等待调用,就不会再通知其他线程。最终,总机的 notify() 生效,唤醒了 A 线程,但 B 线程即使有调用需要处理也未被唤醒。这就是丢失唤醒问题,即一个或多个等待线程未能收到其等待条件已满足的通知。

1.1.1 线程的暂停操作

除了 wait() 方法能让持有锁的线程释放锁并暂停外,Java 还提供了其他方式让未持有锁的线程暂停:
- yield() 调用:暂停当前线程,请求调度器运行其他线程。调度器决定是否暂停该线程以及何时重启。若没有其他线程可运行,调度器可能会忽略 yield() 调用。
- sleep(t) 调用:指示调度器在指定的时间 t 内不运行该线程,调度器可在之后的任意时间重启该线程。

1.1.2 线程局部对象

在 Java 中,每个线程拥有自己的私有变量实例往往很有用。Java 通过 ThreadLocal<T> 类来支持线程局部对象,该类为每个线程管理一个类型为 T 的对象集合。不过,线程局部变量并非 Java 内

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值