博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java并发编程学习笔记1
阅读量:4297 次
发布时间:2019-05-27

本文共 704 字,大约阅读时间需要 2 分钟。

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

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

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

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

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

转载地址:http://jgcws.baihongyu.com/

你可能感兴趣的文章
简单调查HTMLayout
查看>>
CIPAddressCtrl
查看>>
MFC 等待函数 WaitKey
查看>>
CWinThread 线程管理
查看>>
Socket 连接异常 之"由于目标机器积极拒绝,无法连接" 的诊断
查看>>
Socket 端口与防火墙 资料收集
查看>>
OleInitialize、CoInitialize、CoInitializeEx和AfxOleInit()区别
查看>>
FFmpeg浅尝辄止(二)——YUV视频序列编码为视频 ~~ 新版修改版-调通
查看>>
文章索引-winform
查看>>
Onvif PTZ简介
查看>>
HTTP basic Authorization
查看>>
HTML5表单元素
查看>>
HTML5 Web 存储
查看>>
Build a tribute Page
查看>>
浅谈js的内存与闭包
查看>>
ECMAScript 6 简明教程
查看>>
JS数组方法
查看>>
块级元素、行内元素、行块元素
查看>>
freeCodeCamp - JS - Profile Lookup
查看>>
freeCodeCamp - JS - Create a JavaScript Slot Machine
查看>>