java并发编程学习笔记1

本文探讨了现代操作系统中线程作为基本调度单位的原因,分析了多线程编程带来的性能提升、建模简化等优势,并讨论了线程安全性和竞态条件等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在大多数现代操作系统中,都是以线程为基本的调度单位。如果没有明确的协同机制,那么线程将彼此独立执行。由于同一个进程中的所有线程都将共享进程的内存地址空间,因此这些线程都能访问相同的变量并在同一个堆上分配对象。但每个线程都有各自的程序计数器,栈以及局部变量等。

    通过提高时钟频率来提升性能已经变得越来越困难,处理器产商都开始转而在单个芯片上防止多个处理器核。由于基本的调度单位是线程,因此如果程序中只有一个线程,那么最多同时只能在一个处理器上运行,单线程程序无疑是对多处理器系统的资源浪费。即便是单处理器系统,使用多个线程也有助于获得更高的吞吐率,使程序能够在I/O阻塞期间继续执行。

    多线程的另一个优势在于建模的简单性。单一类型的任务更易于编写和调试,将复杂且异步的工作流分解为一组简单并且同步的工作流,每个工作流在一个单独的线程中运行,并在特定的同步位置进行交互。

     线程安全性是非常复杂的,在没有充足同步的情况下,多个线程的操作执行顺序是不可预测的。多线程共享内存空间比其他线程间通信机制更容易实现数据共享,但必须对共享变量的操作进行协同。例如,java的synchronized关键字,具体用法详见:http://blog.youkuaiyun.com/luoweifu/article/details/46613015。在《Java并发编程实战》这本书中,作者提出了线程安全性的定义,线程安全性最核心的概念就是正确性,即类的行为和规范是一致的。当多个线程访问某个类时,不论采用何种调度方式,并且无需任何额外的同步或协同,这个类都能保证正确的行为,那么就这个类是线程安全的。线程安全类封装了必要的同步机制。

    当正确性依赖多线程的时序时,就会发生竞态条件。一种常见类型是先检测后执行,即通过一个失效的观测结果决定下一步的动作。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值