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 ...
随机推荐
- 【原】简单shell练习(五)
1.查询一个文件中某个单词出现的次数 # grep -o 'ts' ./test/txt |wc -l 2.统计当前文件夹下文件的个数 ls -l |grep "^-"|wc -l ...
- Mac 下 vim 常用命令
vim 三种模式:命令模式.插入模式.底线命令模式. 切换模式: 命令模式: 启动 vim 进入命令模式: i 切换到插入模式,以输入字符. x 删除当前光标所在处的字符. : 切换到底线命令 ...
- [Unity] Shader Graph Error 当前渲染管道与此主节点不兼容(The current render pipeline is not compatible with this master node)
Shader Graph Error : The current render pipeline is not compatible with this master node 问题产生环境: Un ...
- javaweb项目中web.xml配置文件的/和/*的区别
1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...
- Git - 删除github上的提交历史
参考 https://segmentfault.com/q/1010000002898735 https://stackoverflow.com/questions/1338728/delete-co ...
- 奖学金(0)<P2007_1>
奖学金 (scholar.pas/c/cpp) [问题描述] 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:段落中超出屏幕部分不换行
<!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...
- Linux命令:yum命令
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具 一.yum命令用法 yum repolist ...
- freemarker 作为 word 模板实现下载功能
1:新建一个.doc 文档写好自己要导出文字如下图 2:把word 文档另存为xml 格式的文件用编辑器打开如图下,(如果你打开文件里面的标签没换行格式,那么你在myeclipse 新建一个jsp 文 ...
- linux 基本命令学习总结
1. linux的目录结构 (linux核心:一切皆文件) 目录结构解释 (主要的有 /etc /home /mnt /opt /usr /tmp) 相对路径和绝对路径的区别 绝对路径 ...