java并发编程实战读书笔记(第一章|java并发编程实战读书笔记:第一章 简介)
为什么要在操作系统上实现多个程序同时执行
资源利用率、公平性、便利性
线程出现的好处
降低开发成本丶提升性能、能将异步工作流转换成串行工作流、降低代码复杂度、
提高用户界面响应的灵敏度,听声资源利用率和系统吞吐率、简化jvm实现
- 充分利用处理器:
- 如果在双处理器上,如果程序只有一个线程那么只使用一半的cpu资源
- 如果设计正确,不论是多核的处理器还是单处理器都能获得更高的吞吐率
- 在多处理器上不用多说,可以同时执行两个线程肯定比执行一个线程另一半的cpu空闲要好
- 在单处理器上,如果是单线程的程序,会在等待其他操作,如 IO 网络时,cpu处于空闲状态。如果是多线程程序那么则在等待这些操作时可以切到另外一个线程上执行任务,总的说就是可以再IO阻塞期间可以继续运行
- 建模的简单性
如果程序只有一种类型的任务,那么肯定比包含多种不同类型的任务要更容易的去编码。多线程正是把多个不同种类的任务放在了不同的线程上。这样就可以每个线程处理自己的任务,形成一种串行执行的假象(其实是在并行)
比如servlet,我们不需要知道现在有多少个请求,也不需要知道套接字的输入流和输出流是否被阻塞,当使用Servlet时就像在使用一个单线程程序。
- 异步时间的简化处理
当有多个套接字链接请求时,这时如果是阻塞的IO则会出现一直阻塞的情况,而且在线程别阻塞的期间所有请求处理都会停顿。为了避免这个问题那么则服务器的应用程序需要使用非阻塞I/O,非阻塞I/O很复杂而且容易出错。好的做法是每个请求让它有自己的处理现场,那么处理请求时则不会影响其他请求
- 用户界面更灵敏的响应
就是有一个主线程,有一个操作的时候就会单独创建一个线程来处理,这样就不会出现卡住之类的线程带来的风险
- 安全性问题:执行的结果不可预测。在单线程工作好好的,到多线程就不行了
- 活跃性问题:某个操作无法继续执行下去,串行的表现形式之一是无限循环,多线程就是一些死锁,饥饿等
- 性能问题:多线程在切换上下文时会有性能开销,还有一些共享机制会一直编译器的优化
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用