Java并发概述
2016-03-08 18:47
387 查看
1、并发和多线程
并发的作用在于充分利用资源(多处理器or多核),在有限的资源下进行多任务的处理。
并发的概念表现在编程上,则为多线程编程,常见的实例:java web中的servlet就是采用的多线程机制。
线程作为轻量进程,本身不具有资源,而进程才是拥有资源的主体。
2、为什么使用多线程
多线程建立在操作系统的产生之后,在此之前,机器或者说处理器处理程序时,只能按照单个的执行流程进行,即所谓的单线程。
单线程所遇到的严重问题在于,当程序需要处理例如输入输出IO事件,与其他的IO设备交互并等待结果时,会使得CPU处于高度空闲状态,并未得到充分的利用,如果可以将此时的CPU用于处理其余的任务,等待IO结果返回时再继续执行,则达到了处理器资源的充分利用,同时也使得用户感受到的是多个任务在同时进行。
3、多线程编程需要注意的问题:多个线程之间的数据同步问题
线程的安全性:事件/任务会正确的发生;
线程的活跃性:事件/任务会在程序运行过程中发生;
线程的性能:线程调度会导致频繁的上下文切换,引起过多的开销。
达到的目标:正确的任务尽快的发生。
4、Java中实现多线程的方式
继承Thread类
实现Runnable接口
使用Excutor框架 Java SE5之后支持
如果多个线程同时访问一个可变的状态变量时没有做必要的同步,可能会引发数据错误,导致意想不到的结果;
解决的方法有3个:
1、不在线程间共享该状态变量
2、将状态变量修改为不可变的变量
3、在访问状态变量时使用同步
线程间同步,保证复合操作的原子性,例如 读取-修改-写入 这样的如何操作,要么一起执行,要么不执行。
对象的内置锁 TimerTask
大多数情况下,只同步需要同步的代码块,而不是整个方法;
synchronized(lock)中的lock最好是类的class对象
java.util.concurrent中的大量的有关线程同步操作的类
并发的作用在于充分利用资源(多处理器or多核),在有限的资源下进行多任务的处理。
并发的概念表现在编程上,则为多线程编程,常见的实例:java web中的servlet就是采用的多线程机制。
线程作为轻量进程,本身不具有资源,而进程才是拥有资源的主体。
2、为什么使用多线程
多线程建立在操作系统的产生之后,在此之前,机器或者说处理器处理程序时,只能按照单个的执行流程进行,即所谓的单线程。
单线程所遇到的严重问题在于,当程序需要处理例如输入输出IO事件,与其他的IO设备交互并等待结果时,会使得CPU处于高度空闲状态,并未得到充分的利用,如果可以将此时的CPU用于处理其余的任务,等待IO结果返回时再继续执行,则达到了处理器资源的充分利用,同时也使得用户感受到的是多个任务在同时进行。
3、多线程编程需要注意的问题:多个线程之间的数据同步问题
线程的安全性:事件/任务会正确的发生;
线程的活跃性:事件/任务会在程序运行过程中发生;
线程的性能:线程调度会导致频繁的上下文切换,引起过多的开销。
达到的目标:正确的任务尽快的发生。
4、Java中实现多线程的方式
继承Thread类
实现Runnable接口
使用Excutor框架 Java SE5之后支持
如果多个线程同时访问一个可变的状态变量时没有做必要的同步,可能会引发数据错误,导致意想不到的结果;
解决的方法有3个:
1、不在线程间共享该状态变量
2、将状态变量修改为不可变的变量
3、在访问状态变量时使用同步
线程间同步,保证复合操作的原子性,例如 读取-修改-写入 这样的如何操作,要么一起执行,要么不执行。
对象的内置锁 TimerTask
大多数情况下,只同步需要同步的代码块,而不是整个方法;
synchronized(lock)中的lock最好是类的class对象
java.util.concurrent中的大量的有关线程同步操作的类
相关文章推荐
- java cookie
- 泛型继承接口Demo
- 做一个合格的程序猿之浅析Spring IoC源码(一)分析前的准备和思考
- JAVA学习计划
- 从海量数据中查找出前k个最小或最大值的算法(java)
- JAVA环境变量配置
- java static 放在哪
- spring+springMvc+mybatis 记录备忘
- eclipse vi风格
- Java I/O学习(附实例和详解)
- Java I/O学习(附实例和详解)
- spring中scope作用域(转)
- 使用spring-data-solr做solr客户端
- Java单例模式七种实现方式
- Java Web并发访问的线程安全问题
- java IO之字节流和字符流比较
- java解析字符串拆分单独元素
- 1.单例模式
- spring的自动装配Bean与自动检测Bean
- Java中使用二重循环打印沙漏图形