Java并发编程之并发简介
操作系统中同时执行多个程序原因:
1、资源利用率:系统资源及硬件资源。当一个程序再等待另一个程序时,可以运行另一个程序,可提高资源利用率。
2、公平性:多个程序对计算机上的资源理论上具有同等的使用权。可以通过时间分片等手段使程序共享计算机资源,非一个程序从头到尾执行完毕后,另一个程序才可以得到执行。
3、协作高效:执行多个任务时,应该使用多个程序,然后由这些程序相互通信相互调用,比编写一个程序实现所有任务更容易实现。
串行编程模型优势:直观和简单。按照顺序执行时促使了进程的出现。
进程与线程的关系:
一个进程可以包含多个线程,线程即是一个进程中为提高单个进程执行效率而出现的。现代操作系统基本以线程为基本的调度单位,而不是进程。
线程共享所处进程范围内的资源,比如内存句柄和文件句柄,线程独占各自的程序计数器、栈及局部变量。线程可根据多处理器系统的硬件达到更好的并行性。如果无协同机制,线程可在进程中独立执行。
线程的优势:
1、通过更高效的使用系统资源,有效降低程序的开发和维护成本,提升复杂应用的性能。线程使用得当可降低编程人员代码的复杂度,使代码更容易编写、阅读和维护。发挥多处理器的强大能力。
2、建模的简易性,当一个多任务的程序在执行时,通过将每个任务分配给专门的线程去执行,这样程序的执行逻辑、调度机制、交替执行的操作、异步I/O以及资源等待等问题分离,达到将复杂的的工作流进一步分解,成为一组简单并且同步的工作流,每个工作流在专门的线程中进行,在特定的同步位置进行交互。
3、异步事件的简化处理,单线程请求会出现I/O阻塞情况,某个请求出现阻塞,其他请求需要同步等待。多线程会对每个请求都分配一个专门的线程进行处理,这样请求间是非阻塞I/O。
线程的风险:
1、线程安全性:在没有充足的同步情况下,多个线程中的操作执行顺序是不可预测的。比如 a=1,a++;这种竞态条件问题,多线程下并不安全。
只有将a=1,a++所在方法设置为需同步的(通常使用synchronized关键字)才是线程安全的。
2、活跃性:活跃性问题的形式之一就是“无限循环”,从而使得循环之后的代码无法得到执行。线程的活跃性问题还有:锁等待、死锁、饥饿、活锁。
3、性能问题:频繁的上下文切换操作、cpu调度耗时高于线程执行时间、同步导致的内存总线同步流量增加、编译器对代码的优化被抑制。
Java并发编程之并发简介的更多相关文章
- Java并发编程:并发容器之CopyOnWriteArrayList(转载)
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...
- Java并发编程:并发容器之ConcurrentHashMap(转载)
Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concu ...
- Java并发编程:并发容器之ConcurrentHashMap
转载: Java并发编程:并发容器之ConcurrentHashMap JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的 ...
- Java并发编程:并发容器之CopyOnWriteArrayList
转载: Java并发编程:并发容器之CopyOnWriteArrayList Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个 ...
- Java并发编程:并发容器ConcurrentHashMap
Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concu ...
- 【Java并发编程】并发编程大合集-值得收藏
http://blog.csdn.net/ns_code/article/details/17539599这个博主的关于java并发编程系列很不错,值得收藏. 为了方便各位网友学习以及方便自己复习之用 ...
- 【转】Java并发编程:并发容器之CopyOnWriteArrayList
Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...
- 【转】Java并发编程:并发容器之ConcurrentHashMap
JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法的代价就是严重降低了 ...
- Java并发编程:并发容器之ConcurrentHashMap(转)
本文转自:http://www.cnblogs.com/dolphin0520/p/3932905.html Java并发编程:并发容器之ConcurrentHashMap(转载) 下面这部分内容转载 ...
- 11、Java并发编程:并发容器之CopyOnWriteArrayList
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW ...
随机推荐
- C++11特性中基于范围的for循环
本文摘录柳神笔记: 除了像C语⾔的for语句 for (i = 0; i < arr.size(); i++) 这样,C++11标准还为C++添加了⼀种新的 for 循环⽅ 式,叫做基于范围 ...
- leetcode 0208
目录 ✅ 108. 将有序数组转换为二叉搜索树 描述 解答 py [tdo rev 0208]py知识:if not x: 和if x is not None:和if not x is None:使用 ...
- Update(Stage4):sparksql:第3节 Dataset (DataFrame) 的基础操作 & 第4节 SparkSQL_聚合操作_连接操作
8. Dataset (DataFrame) 的基础操作 8.1. 有类型操作 8.2. 无类型转换 8.5. Column 对象 9. 缺失值处理 10. 聚合 11. 连接 8. Dataset ...
- 【PAT甲级】1052 Linked List Sorting (25 分)
题意: 输入一个正整数N(<=100000),和一个链表的头结点地址.接着输入N行,每行包括一个结点的地址,结点存放的值(-1e5~1e5),指向下一个结点的地址.地址由五位包含前导零的正整数组 ...
- 「CF383C Propagating tree」
这应该属于一个比较麻烦的数据结构处理树上问题. 题目大意 给出一颗根节点编号为 \(1\) 的树,对于一个节点修改时在它的子树中对于深度奇偶性相同的节点加上这个权值,不同则减去这个值,单点查询. 分析 ...
- Tomcat热部署与热加载!
所谓的热部署与热加载就是两个值:(reloadable='true'与autoDeloy='true')
- 【摘录自MDN】预定义函数
JavaScript语言有好些个顶级的内建函数: eval() eval()方法会对一串字符串形式的JavaScript代码字符求值. uneval() uneval()方法创建的一个Object的 ...
- ios中使用socket实现聊天
[iOS]SocketRocket简单实现聊天室功能 https://www.jianshu.com/p/db34940f1135 CocoaAsyncSocket https://gi ...
- Java记录2---包的使用
javac -d . A.java -d 表示自动生成包层 . 表示这个包层在当前目录下建立 package link.roland;//package 语句必须是第一条语句 //该语句表示把该文件中 ...
- Android 记住密码和自动登录界面的实现(SharedPreferences 的用法)
原文:http://blog.csdn.net/liuyiming_/article/details/7704923 SharedPreferences介绍: SharedPreferences是An ...