机制

Java高级-解析Java中的多线程机制

折月煮酒 提交于 2019-12-09 19:38:07
一、进程与应用程序的区别 进程(Process)是最初定义在Unix等多用户、多任务操作系统环境下用于表示应用程序在内存环境中基本执行单元的概念。以Unix操作系统为例,进程是Unix操作系统环境中的基本成分、是系统资源分配的基本单位。Unix操作系统中完成的几乎所有用户管理和资源分配等工作都是通过操作系统对应用程序进程的控制来实现的。 C、C++、Java等语言编写的源程序经相应的编译器编译成可执行文件后,提交给计算机处理器运行。这时, 处在可执行状态中的应用程序称为进程 。 从用户角度来看,进程是应用程序的一个执行过程。从操作系统核心角度来看,进程代表的是操作系统分配的内存、CPU时间片等资源的基本单位,是为正在运行的程序提供的运行环境。进程与应用程序的区别在于应用程序作为一个静态文件存储在计算机系统的硬盘等存储空间中,而进程则是处于动态条件下由操作系统维护的系统资源管理实体 。多任务环境下应用程序进程的主要特点包括: ● 进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间; ● 进程的生存期状态包括创建、就绪、运行、阻塞和死亡等类型; ● 从应用程序进程在执行过程中向CPU发出的运行指令形式不同,可以将进程的状态分为用户态和核心态。处于用户态下的进程执行的是应用程序指令、处于核心态下的应用程序进程执行的是操作系统指令。

fail-fast原理以及解决办法

孤街浪徒 提交于 2019-12-05 13:41:52
1.背景 今天处理一个多线程业务,这个业务原来是在单线程中运行的,现在对这个业务进行改造,使其能在多线程中运行以加快处理效率。结果抛出了 ConcurrentModificationException 异常。究其原因,原来此业务使用了ArrayList来存储数据。而ArrayList集合是不支持在多线程中使用的,因为在多线程中,一个线程通过iterator去遍历某集合的过程中,若该集合内容被其他线程所改变,那么(遍历线程的集合)就会抛出ConcurrentModificationException异常。这是集合的fai-fast机制(具体原理请见后面内容) 2.什么是fail-fast fail-fast 机制是java集合(Collection)中的一种错误机制。 当多个线程对同一个集合的内容进行操作时, 就可能 会产生fail-fast事件。例如:当某一个线程A通过iterator去遍历某集合的过程中,若该集合的内容被其他线程所改变了;那么线程A访问集合时,就会抛出ConcurrentModificationException异常,产生fail-fast事件。 为什么说是有可能会产生fail-fast事件 ?因为迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出