java 虚拟机与并发处理几个问题简要(二)
六、两个重要的概念性问题:
1、同步:要保持数据的一致性,就需要一种保证并发进程正确执行顺序的机制。这种机制就是 进程同步(Process Synchronization)。
竞争资源的多个进程按着特定的顺序执行,目的是使并发执行的进程之间能有效的共享资源和相互合作,从而使程序的执行具有可再现性。(广义)
异步环境下的一组并发进程,因直接制约而互相发送消息而进行相互合作、互相等待,使得各进程按一定的速度执行的过程称为进程间的同步--张尧学 《计算机操作系统教程》(狭义)
2、线程池:根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。若队列中没有等待进程,线程池的这一资源处于等待。当一个新任务需要运行时,如果线程池中有等待的工作线程,就可以开始运行了;否则进入等待队列。一是为减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。二是可以根据系统的承受能力,调整线程池中工作线线程的数目,防止消耗过多的内存
Java里面线程池的顶级接口是Executor,但是严格意义上讲Executor并不是一个线程池,而只是一个执行线程的工具。真正的线程池接口是ExecutorService。
关于更多的创建等问题 http://www.oschina.net/question/565065_86540
七、三种方法用于处理状态(一项编程艺术实践活动):共享可变性(shared mutability)方法、隔离可变性(isolated mutability)方法、纯粹不可变性(pure mutability)方法
共享可变性(shared mutability)设计:这是一种极端情况,为了使用此方法,我们必须保证不会有两个线程同时修改同一个字段,并且对多个字段的修改必须满足一致性原则。统计工龄的例子:房间中的每一个人都当成一个线程,我们需要她们共享total的访问进行同步,一个同事的出错将会整体崩溃,我们必须监督多个试图修改数据的总人数(让他们好好排队)并且一个人累加的时候,其他人都得等待。显然,这种方式引入过多的线程,容易出现低并发性。
隔离可变性(isolated mutability)设计:这是一种折中方案,保证任何在多个线程共享的事务保持不变,这一点java容易实现。
统计工龄的例子:将total变量设置为0,屋子里的每个人都看成是一个线程,包括我自己在内,每个线程只是简单的发送消息(自己的工龄),然后由我相加,每个人不共享这个total,我是唯一可以改变total的人,此不涉及同步问题。如果我们保证共享数据是不可变的或者可变是可以隔离的,那么我们认为此问题不涉及同步。
纯粹不可变性(pure mutability)设计:这是另一种极端情况,这种情况下,所有的事物都是不可变的。
统计工龄的例子:让屋子里的人组成一个人链,然后一个人告诉其左边的人,然后由其左边的人累加再告诉其左边的人,我必须告诉我左边的人,因为他正着急的等待,由最后一个人统计total。这个情况下与并发无关。如果人数过多,我们可一分组或者成树形。
java 虚拟机与并发处理几个问题简要(二)的更多相关文章
- java 虚拟机与并发处理几个问题简要(一)
一. 处理任务时,应该将代码分成不同的部分,每一部分由一个线程进行,但是会因为任务负载不平衡导致有闲有忙.最好是应分成不同的部分,分配不同的线程,尽量让处理器不停的处理,不要闲下来.如何分配线程数 ...
- Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)
Java虚拟机运行时栈帧结构(周志明书上P237页) 栈帧是什么? 栈帧是一种数据结构,用于虚拟机进行方法的调用和执行. 栈帧是虚拟机栈的栈元素,也就是入栈和出栈的一个单元. 2018.1.2更新(在 ...
- 深入理解JAVA虚拟机原理之内存分配策略(二)
更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...
- 《深入理解java虚拟机》读书笔记十一——第十二章
第十二章 Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对比
1.什么是JVM? JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才能够运行Java程序,JAVA在编译后会生成类似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是, ...
- JAVA虚拟机、Dalvik虚拟机和ART虚拟机简要对照
1.什么是JVM? JVM本质上就是一个软件,是计算机硬件的一层软件抽象,在这之上才干够运行Java程序,JAVA在编译后会生成相似于汇编语言的JVM字节码,与C语言编译后产生的汇编语言不同的是,C编 ...
- 【深入Java虚拟机】之四:类加载机制
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载.验证.准备.解析.初始化.使用和卸载七个阶段.它们开始的顺序如下图所示: 其中类加载的过程包括了加载.验 ...
- 【深入Java虚拟机】之二:Java垃圾回收机制
[深入Java虚拟机]之:Java垃圾收集机制 对象引用 Java中的垃圾回收一般是在Java堆中进行,因为堆中几乎存放了Java中所有的对象实例.谈到Java堆中的垃圾回收,自然要谈到引用.在JDK ...
- 【深入Java虚拟机】之一:Java内存模型与内存溢出
[深入Java虚拟机]之:Java内存区域与内存溢出 高速缓存模型如下: ----------------------------------------------------分割线-------- ...
随机推荐
- java 比较几种常见循环方式的优劣
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt224 我们常用for循环,foeach,while等作为循环list或者数组 ...
- CSS3动画效果之animation
先解决上一篇的遗留问题. div { width: 300px; height: 200px; background-color: red; -webkit-animation: test1 2s; ...
- Word直接发布新浪博客(以Wo…
原文地址:Word直接发布新浪博客(以Word 2013为例)作者:paulke2011 注意:这篇博客直接由Word 2013发出!这虽然也算是一个教程,但更多的是一个试验品. 老早就知道Word有 ...
- [转载]dreamweaver代码提示失效
原文地址:dreamweaver代码提示失效作者:云中雁 2007-03-23 12:19:22| 分类: 编程手记 | 标签:web2.0 javascript |字号大中小 订阅 吴庆民 ...
- PHP面向对象知识点
public private protected __construct() __destruct() __set() __get() extends(继承) :: (重载) abstract cla ...
- 【ctrl+A】与【ctrl+单击图层缩略图】有什么区别?
如果这图层没有透明区域的话那和ctrl+A的效果是一样的! 但如果图层有不透明区域,那选中的就是图层中所有不透明的区域!
- 在对话框中利用CToolBar类添加工具条的方法
UINT BASED_CODE DockTool[]={ID_NEWGAME,ID_SAVE,ID_OPEN,ID_SEPARATOR,ID_COPYFEN,ID_PASTEFEN,ID_SEPARA ...
- windows下使用密钥登录Linux及xshell代理转发
1.密钥登录原理 一般我们使用xshell访问远程主机(Linux主机)时,都是先请管理员给我们开一个账户,即为我们设置一个一个用户名和对应的密码,然后我们就可以使用下面的方式登录到远程主机了: 在这 ...
- JAVA基础第十组(5道题)
46.[程序46] 题目:两个字符串连接程序 package com.niit.homework1; import java.util.Scanner; /** * @author: Annie * ...
- 201521123032 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 在课堂上在老师 ...