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

多线程编程与多处理器架构解析

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

1. 软件基础
1.1 Java 编程中的线程问题

在 Java 编程里,存在一些关键的线程操作和问题。比如,当 S 将一个调用放入队列并调用 notify() 唤醒一个操作线程时,由于通知是异步的,会存在延迟。之后 S 返回又放入另一个调用,若队列已有等待调用则不再通知其他线程。最终交换机的 notify() 生效,唤醒了 A 但没唤醒 B,即便有给 B 的调用,这就是“丢失唤醒问题”,即一个或多个等待线程未收到其等待条件已满足的通知。

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

线程局部对象在 Java 中也很有用,Java 通过 ThreadLocal<T> 类支持线程局部对象,该类为每个线程管理一个类型为 T 的对象集合。不过线程局部变量的接口有些复杂,使用时不能直接使用 ThreadLocal<T> 类,而是要定义一个它的子类,重写 initial

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值