12 chjttony

尚未进行身份认证

java软件工程师。

等级
TA的排名 1k+

《Java并发编程实践》笔记8——Fork/Join框架

《java并发编程实践》书中并没有介绍Fork/Join框架,该框架和并发编程关系密切,也是由本书作者之一DougLea在JDK1.7引入,因此作为最后一篇笔记简单介绍。Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,它把一个大任务分割为若干个小任务执行,最后将小任务的执行结果汇总得到大任务的结果。当看到这个定义时,我想很多人会和我一样立刻想到现在非常热门的Map-Red

2015-07-02 10:57:43

《Java并发编程实践》笔记8——Fork/Join框架

《java并发编程实践》书中并没有介绍Fork/Join框架,该框架和并发编程关系密切,也是由本书作者之一DougLea在JDK1.7引入,因此作为最后一篇笔记简单介绍。Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,它把一个大任务分割为若干个小任务执行,最后将小任务的执行结果汇总得到大任务的结果。当看到这个定义时,我想很多人会和我一样立刻想到现在非常热门的Map-Red

2015-07-02 10:56:30

《Java并发编程实践》笔记8——Fork/Join框架

《java并发编程实践》书中并没有介绍Fork/Join框架,该框架和并发编程关系密切,也是由本书作者之一DougLea在JDK1.7引入,因此作为最后一篇笔记简单介绍。Fork/Join框架是JDK1.7提供的一个用于并行执行任务的框架,它把一个大任务分割为若干个小任务执行,最后将小任务的执行结果汇总得到大任务的结果。当看到这个定义时,我想很多人会和我一样立刻想到现在非常热门的Map-Red

2015-07-02 10:54:07

《Java并发编程实践》笔记7——非阻塞同步算法

1.锁的劣势:锁是实现线程同步最简单的方式,也是代价最高的方式,其有如下的缺点:(1).重量级:现代JVM对非竞争的锁的获取和释放进行优化,可以根据系统中锁占用的历史数据决定使用自旋还是挂起等待,使得它非常高效。但是如果有多个线程同时请求锁,JVM就需要向操作系统寻求帮助,没有获取到锁的线程可能会被挂起等待,并稍后恢复运行。线程的挂起和恢复会带来很大的上下文切换和调度延时开销。(2)

2015-07-02 10:29:35

《Java并发编程实践》笔记7——非阻塞同步算法

1.锁的劣势:锁是实现线程同步最简单的方式,也是代价最高的方式,其有如下的缺点:(1).重量级:现代JVM对非竞争的锁的获取和释放进行优化,可以根据系统中锁占用的历史数据决定使用自旋还是挂起等待,使得它非常高效。但是如果有多个线程同时请求锁,JVM就需要向操作系统寻求帮助,没有获取到锁的线程可能会被挂起等待,并稍后恢复运行。线程的挂起和恢复会带来很大的上下文切换和调度延时开销。(2)

2015-07-02 10:28:13

《Java并发编程实践》笔记6——并发性调优

1.Amdahl定律:Amdahl(阿姆达尔)定律描述了在一个系统中,基于可并行化和串行化的组件各自所占的比重,程序通过获得额外的计算资源,理论上能够加速多少。若F是必须串行化执行的比重,那么在一个N处理器的机器中,通过Amdahl定律计算可以获得理论加速为:Speedup<=1/(F+(1-F)/N)当N无限增大趋近与无穷大时,Speedup的最大值无限接近于1/F。Amdahl估

2015-07-01 14:52:26

《Java并发编程实践》笔记5——线程活跃性问题及其解决方法

1.死锁的定义及发生条件:死锁就像是两个人过独木桥,在桥中间碰到了,谁也不想让步,结果谁也无法通过。线程A占有锁L时想要获得锁M,而线程B占有锁M并尝试获得锁L,两个线程将永远等待下去,这种情况称为死锁(deadlock),或致命拥抱(the deadly embrace)。在并发程序设计中,死锁 (deadlock) 是一种十分常见的逻辑错误。通过采用正确的编程方式,死锁的发生不难避

2015-06-26 16:41:33

《Java并发编程实践》笔记4——线程池高级

1.估算线程池最优大小:Ncpu = CPU的数量 = Runtime.getRuntime().availableProcessors();Ucpu = 目标CPU的使用率, 0 W/C = 等待时间与计算时间的比率;为了保持处理器达到期望的使用率,最优的线程池大小等于:Nthreads = Ncpu * Ucpu * (1+ W/C);2.配置ThreadPoolExe

2015-06-26 11:02:32

《Java并发编程实践》笔记3——线程池基础

1.JDK中的Executor框架是基于生产者-消费者模式的线程池,提交任务的线程是生产者,执行任务的线程是消费者。Executor线程池可以用于异步任务执行,而且支持很多不同类型任务执行策略,同时为任务提交和任务执行之间的解耦提供了标准方法。Executor线程池支持如下三种线程执行策略:(1).顺序执行:类似于单线程顺序执行任务,优点是实现简单;缺点是扩展性受限,执行效率低下,

2015-06-25 10:36:39

《Java并发编程实践》笔记2——基础同步类

1.同步容器类复合操作容易出现的问题:JDK中同步容器类包括两部分:早期JDK中的Vector和Hashtable;JDK1.2引入的同步包装类,即由Collections.synchronizedXxx工厂方法创建的容器类。同步容器类都是线程安全的,它们提供的基本操作都是原子操作,但是对于诸如迭代、导航和缺少即加入的条件运算等复合操作来说,通常需要使用额外的客户端加锁进行保护来确

2015-06-23 17:52:49

《Java并发编程实践》笔记1——并发编程基础

1.线程安全定义:当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替执行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就被称之为是线程安全的。简言之对于线程安全类的实例进行顺序或并发的一系列操作,都不会导致实例处于无效状态。只有对象状态可变,且存在对象共享,才需要考虑线程安全。可以通过下面的方法来确保线程安全:(1).

2015-06-23 15:13:13

《Java Performance》笔记4——JVM性能调优入门

1.应用程序的系统需求:应用程序的系统需求是应用程序运行时某方面的要求,譬如吞吐量、响应时间、内存消耗量、可用性、可管理性等。JVM性能调优主要针对如下的系统需求:(1).可用性:是对应用程序处于可操作、可使用状态的度量。可用性需求指的是当程序的某些组件发生故障或失效时,应用程序或应用程序的一部分在多大程度上海可以继续提供服务。Java应用程序的上下文中,利用应用程序组件化、在多个

2015-05-21 20:32:06

《Java Performance》笔记3——Java应用性能分析工具

1.Java应用性能分析的方法分析和内存分析:方法分析:能够提供java应用程序中方法执行时间的信息,既包括java方法也包括本地方法。内存分析:提供java应用程序内存使用信息,包括内存中已分配对象的数目、大小及活跃对象等信息,并附有对象分配时的栈追踪信息。Oracle Solaris Studio Performance Analyzer是Solaris和Linux平台上常用的性能

2015-05-21 20:29:21

《Java Performance》笔记2——JVM命令行选项及垃圾收集日志解析

1.JVM命令行选项:HotSpot VM运行时系统解析命令行选项,并据此配置HotSpot VM,HotSpot的命令行选项主要有3类:A. 标准选项:JVM规范要求所有的JVM都必须实现的选项,它们在发行版之间保持稳定,但也可能在后续的发行版中被废除。如:-client,-server等等。B. 非标准选项:以”-X”为前缀,不保证、也不强制所有JVM实现都必须支持,它

2015-05-21 20:24:34

《Java Performance》笔记1——性能分析基础

1.性能分析两种方法:(1).自顶向下:应用开发人员通过着眼于软件栈顶层的应用,从上往下寻找性能优化的机会。(2).自底向上:性能专家从软件栈底层的CPU统计数据(例如CPU高速缓存未命中率、CPU指令效率)开始,逐渐上升到应用自身的结构或应用常见的使用方式。2.CPU使用率:大多数操作系统的CPU使用率分为用户态CPU使用率和系统态CPU使用率。用户态CPU使用率:执

2015-05-21 20:16:12

《java解惑》读书笔记8——更多类谜题

1.变量隐藏:问题:猜猜下面的小程序打印结果应该是什么:classBase{publicStringclassName="Base";}classDerivedextendsBase{privateStringclassName="Derived";}publicclassTest{publicstati

2014-03-04 17:13:33

《java解惑》读书笔记7——库谜题

1.不可变类:问题:下面的程序计算5000+50000+500000值,代码如下:importjava.math.BigInteger;publicclassTest{publicstaticvoidmain(String[]args){BigIntegerfiveThousand=newBigInteger("5000");

2014-02-24 16:06:10

《java解惑》读书笔记6——类谜题

1.方法重载:问题:下面的程序演示方法重载,代码如下:publicclassTest{publicstaticvoidmain(String[]args){newTest(null);}privateTest(Objecto){System.out.println("Object");

2014-02-19 13:56:28

《java解惑》读书笔记5——异常谜题

1.finally语句块中的return:问题:下面的小程序运行结果是什么:publicclassTest{publicstaticvoidmain(String[]args){System.out.println(decision());}staticbooleandecision(){t

2014-01-24 15:56:17

《java解惑》读书笔记4——循环谜题

1.byte数值比较:问题:下面的程序循环遍历byte数值,以查找某个特定值,代码如下:publicclassTest{publicstaticvoidmain(String[]args){for(byteb=Byte.MIN_VALUE;b<Byte.MAX_VALUE;b++){if(b==0x

2014-01-17 17:21:37

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!