【Java并发编程实战】01简介
2020-03-27 19:06
225 查看
1 线程的优势
1.1 发挥多处理器的强大能力
多线程程序可以同时在多个处理器上执行。如果设计正确,多线程程序可以通过提高处理器资源的利用率来提升系统吞吐率。
1.2 建模的简单性
如果在程序中只包含一种类型的任务,那么比包含多种不同类型任务的程序要更易于编写,错误更少,也更容易测试。
1.3 异步时间的简化处理
服务器应用程序在接受来自多个远程客户端的套接字连接请求时,如果为每个连接都分配其各自的线程并且使用同步I/O,那么就会降低这类程序的开发难度。
1.4 响应更灵敏的用户界面
将长时间运行的任务放在一个单独的线程中运行,那么事件线程就能及时地处理界面事件,从而使用户界面具有更高的灵敏度。
2 线程带来的风险
2.1 安全性问题
线程安全性可能是非常复杂的,在没有充足同步的情况下,多个线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果。由于多个线程要共享相同的内存地址空间,并且时并行运行,因此它们可能会访问或修改其他线程正在使用的变量。虽然可以更容易实现数据共享,但线程有可能会由于无法预料的数据变化而发生错误。
2.2 活跃性问题
安全性的含义是“永远不发生糟糕的事情”,而活跃性则是“某件正确的事情最终会发生”。当某个操作无法继续执行下去时,就会发生活跃性问题。在串行程序中,活跃性问题的形式之一是无意中造成的无限循环。多线程将带来其他一些活跃性问题,比如:如果线程A在等待线程B释放其持有的资源,而线程B永远都不释放该资源,那么线程A就会永远的等待下去。
2.3 性能问题
在多线程程序中,当线程调度器临时挂起活跃线程并转而运行另一个线程时,就会频繁地出现上下文切换操作,这种操作将带来极大的开销:保存和恢复执行上下文,丢失局部性,并且CPU时间将将更多地花在线程调度而不是线程运行上。当线程共享数据时,必须使用同步机制,而这些机制往往会抑制某些编译器优化,使内存缓存区中的数据无效,以及增加共享内存总线的同步流量。所有这些因素都将带来额外的性能开销。
- 点赞 12
- 收藏
- 分享
- 文章举报
相关文章推荐
- 20170726Python01_Python简介和输入输出
- Mac App开发的正确姿势——01-Window简介
- 深度探索 C++ 对象模型 01:对象模型简介(附静态成员介绍)
- 【李兴华带你学JAVA】01.Java简介与环境配置
- 第十二节段 -- 爬虫07:【Scarpy 框架01:简介及安装】
- (原创)c#学习笔记08--面向对象编程简介01--面向对象编程的含义01--对象的含义02--方法
- JDBC基础学习笔记_01JDBC基础简介
- Activiti基础教程--01(简介、代码生成Activiti的25张表、Activiti配置文件activiti.cfg.xml生成25张表、在Eclipse上安装Activiti插件)
- C#的那些事---01:简介
- 02---jsp内置对象01(内置对象简介及四种属性范围)
- Shell脚本攻略01-简介/终端打印
- ThinkPHP实战01——《ThinkPHP3.2.3 实战个人博客》笔记——简介及phpStudy安装
- ActiveMQ(01):简介
- CSS3-01 简介
- Linux学习---shell编程(01-简介)
- mq系列kafka01-简介和集群安装
- 01_BootStrap——简介
- Spring 学习01 Spring 简介 IOC DI
- 《Windows API》01 简介
- MongoDB学习笔记-01 简介、安装