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 ...
随机推荐
- 【PAT甲级】1047 Student List for Course (25 分)
题意: 输入两个正整数N和K(N<=40000,K<=2500),接下来输入N行,每行包括一个学生的名字和所选课程的门数,接着输入每门所选课程的序号.输出每门课程有多少学生选择并按字典序输 ...
- org.springframework.data.redis.RedisConnectionFailureException
org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested ...
- redhat 7.6 流量监控命令、软件(1) ethstatus
1. 查看1个月内流量,只保留一个月的流量 命令: sar -n DEV -f /var/log/sa/sa26 RX代表进来的流量,TX代表出去的流量 2.安装查看实时流量软件eth ...
- 「快学springboot」SpringBoot整合freeMark模板引擎
前言 虽然现在流行前后端分离开发和部署,但是有时候还是需要用到服务端渲染页面的.比如:需要考虑到SEO优化等问题的时候,FreeMark其实还是很有作用的.本人的博客本来是用React开发的,但是后来 ...
- 微信小程序 列表倒计时
最近要实现一个列表倒计时的功能,写了个demo 展示图 <view class="center colu"> <view class="time&quo ...
- PAT T1021 Safe Fruit
暴力搜索加剪枝~ #include<bits/stdc++.h> using namespace std; ; const int inf=1e9; int g[maxn][maxn]; ...
- lua叠代器
注意:叠待值遇到nil就退出 叠代器,是符合for遍历框架,需要满足条件 1-叠代函数,常量,控制变量 2-叠代函数可以接受二个参数,当然也可以忽略处理(利用闭包封装参数作为控制变量和状态变量) 无状 ...
- Caffe2 手写字符识别(MNIST - Create a CNN from Scratch)[8]
本教程创建一个小的神经网络用于手写字符的识别.我们使用MNIST数据集进行训练和测试.这个数据集的训练集包含60000张来自500个人的手写字符的图像,测试集包含10000张独立于训练集的测试图像.你 ...
- 关于c++的头文件和变量声明
写再最前面:摘录于柳神的笔记: C++的头⽂件⼀般是没有像C语⾔的 .h 这样的扩展后缀的,⼀般情况下C语⾔⾥⾯的头⽂件去掉 .h 然 后在前⾯加个 c 就可以继续在C++⽂件中使⽤C语⾔头⽂件中 ...
- 第2节 Scala中面向对象编程:12、13、14、15、16、trait
6.4. Scala中面向对象编程之trait 6.4.1. 将trait作为接口使用 Scala中的trait是一种特殊的概念: 首先先将trait作为接口使用,此时的trait就与Java ...