归档之于 ‘ 2014 年9 月

Akka与Java内存模型的关系

原文链接:http://doc.akka.io/docs/akka/2.3.6/general/jmm.html   译者:clearity

不管你使用的Typesafe系统是Scala版本还是Java版本,都可以使你编写并发程序的过程变得更加容易。这篇文章主要讨论的是Typesafe系统,特别是针对Akka在并发程序中对共享内存的处理部分。

Java内存模型

在之前的Java 5 版本中,Java内存模型的定义是很值得商榷的。以至于在共享内存环境下的多线程处理的结果变得多种多样,比如:

  1. 线程读取不到其他线程写入的值:内存可见性问题
  2. 线程得到了其他线程的“非正常”行为,这也是因为底层指令没有按照期望的顺序执行的结果:指令重排序问题

阅读全文

2.4 监管和监测

原文:http://doc.akka.io/docs/akka/2.3.6/general/supervision.html 译者:Vitas

2.4 监管和监测
本节将从概念层面上介绍有关监管的一些基本元素及其语义。至于在代码中如何具体实现,请参考API的相关章节。

阅读全文

并发编程网线下沙龙

今天下午正式举行,感谢各位的支持!

沙龙背景

马上就是并发编程网(ifeve.com)三岁生日了,首先感谢各位读者粉丝对我们的大力支持和鼓励!三年来,我们共组织翻译了600余篇文章,其中DisruptorNIONettyStorm并发编程JSR133Doug Lea并发论文等系列文章均得到了官方和读者的认可和好评。欣喜于取得如此成绩的同时,更让我们觉得在创造精品文章的路上,我们还有很长的路要走,我们一直在努力!

在三周年到来之际,并发编程网联合Coding.net七牛GreenTeaJUG举办第一场线下沙龙,主题是“并发编程”,号召对并发编程感兴趣的粉丝汇聚一堂,认我们煮酒论“编程”!

阅读全文

AKKA文档(java)——角色系统

原文:http://doc.akka.io/docs/akka/2.3.6/general/actor-systems.html  译者:吴京润

角色是封装了状态与行为的对象,它们通过交换放入接收者信箱的消息实现两两之间的通讯。从某种意义上说,角色是最严格的面向对象编程,不过最好还是把它们当作人来看待:当用角色为一个方案建模时,想象有一群人,并给他们分配了任务,他们在一个组织结构中发挥职能作用,并想象如何做到故障升级(就像在不需要考虑实际利益的情况下与人打交道,也就是说我们不需要关心他们的情绪变化或道德问题)。这样的结果可以充当构建软件的心理脚手架。

注意:一个角色系统是一个会分配1…N个线程的重量级结构,因此为每个逻辑上的应用创建一个角色系统即可。 阅读全文

AKKA文档(java版)—位置透明性

原文:http://doc.akka.io/docs/akka/2.3.6/general/remoting.html  译者:小鱼

2.6 位置透明性

前一章节描述了如何使用角色路径来实现位置透明性。这一个特性应该需要一些额外的说明,因为与之关联的术语“transparent remoting”(透明的远程处理)在编程语言、平台和技术中的用法是不一样的。 阅读全文

Java 8新特性:字符串去重

本文首发与InfoQ

8月19日,Oracle发布了JDK 8u20,JDK 8u20包含很多新特性,比如Java编译器更新、支持在运行时通过API来修改MinHeapFreeRatio和MaxHeapFreeRatio参数、新的GC调优指南文档。不过在众多新特性中,最令人期待的还属字符串去重(String Deduplication )。如何减少内存占用一直是一个永恒的话题,而在Java应用中,经常会看到String对象会占用应用30%的内存,它是Java中最常用的对象之一。新的字符串去重特性可以帮助减少应用中String对象的内存占用,目前该特性只适用于G1垃圾收集器,并且默认不被开启。

阅读全文

深度解析Java8 – AbstractQueuedSynchronizer的实现分析(上)

本文首发在infoQ :www.infoq.com/cn/articles/jdk1.8-abstractqueuedsynchronizer

前言:

Java中的FutureTask作为可异步执行任务并可获取执行结果而被大家所熟知,通常可以使用future.get()来获取线程的执行结果,在线程执行结束之前,get方法会一直阻塞状态,直到call()返回,其优点是使用线程异步执行任务的情况下还可以获取到线程的执行结果,但是FutureTask的以上功能却是依靠通过一个叫AbstractQueuedSynchronizer的类来实现,至少在JDK 1.5、JDK1.6版本是这样的(从1.7开始FutureTask已经被其作者Doug Lea修改为不再依赖AbstractQueuedSynchronizer实现了,这是JDK1.7的变化之一)。但是AbstractQueuedSynchronizer在JDK1.8中还有如下图所示的众多子类:

阅读全文

JVM性能优化系列

阅读全文

Java 8: Lambdas, Part 1

原文链接  作者:Ted Neward  译者:赵峰

了解Java8 中的lambda表达式

对开发人员来说没有什么比自己选择的语言或平台发布新版本更令人激动了。Java开发者也不例外。实际上,我们更期待新版本的发布,有一部分原因是因为在不久前我们还在考虑Java的前途,因为Java的创造者——Sun在衰落。一次与死亡的擦肩而过会使人更加珍惜生命。但在这种情况下,我们的热情来源不像以前发布版本时那样,这次是来源于事实。Java 8最终会获得一些我们期待了几十年的“现代”语言特性。

当然,Java 8主要的改变集中在lambdas(或者叫闭包),这也是这两篇文章主要讨论的内容。但是一个语言特性,就其本身而言它的出现除非其背后有一定的支持,如果它不实用或有趣。Java 7的几个特点符合这种描述:例如,增强数值文本不能让大多数人注意。

阅读全文

Quartz教程四:Trigger

原文链接 | 译文链接 | 翻译:nkcoder

本系列教程由quartz-2.2.x官方文档翻译、整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处,欢迎指正;有兴趣研究源码的同学,可以参考我对quartz-core源码的注释(进行中)

与job一样,trigger也很容易使用,但是还有一些扩展选项需要理解,以便更好地使用quartz。trigger也有很多类型,可以根据实际需要来选择。

最常用的两种trigger会分别在教程五:SimpleTrigger教程六:CronTrigger中讲到;

阅读全文

Java锁的种类以及辨析

下载

作者:山鸡

锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些已经写好提供的锁为我们开发提供了便利,但是锁的具体性质以及类型却很少被提及。本系列文章将分析JAVA中常见的锁以及其特性,为大家答疑解惑。

阅读全文

JVM 性能优化,第二部分:编译器

JVM 性能优化,第二部分:编译器

—为你的应用程序选择正确的Java编译器

 原文连接 译者:Vitas

本文将是JVM 性能优化系列的第二篇文章,Java 编译器将是本文讨论的核心内容。

本文中,作者(Eva Andreasson)首先介绍了不同种类的编译器,并对客户端编译,服务器端编译器和多层编译的运行性能进行了对比。然后,在文章的最后介绍了几种常见的JVM优化方法,如死代码消除,代码嵌入以及循环体优化。

Java最引以为豪的特性“平台独立性”正是源于Java编译器。软件开发人员尽其所能写出最好的java应用程序,紧接着后台运行的编译器产生高效的基于目标平台的可执行代码。不同的编译器适用于不同的应用需求,因而也就产生不同的优化结果。因此,如果你能更好的理解编译器的工作原理、了解更多种类的编译器,那么你就能更好的优化你的Java程序。

本篇文章突出强调和解释了各种Java虚拟机编译器之间的不同。同时,我也会探讨一些及时编译器(JIT)常用的优化方案。

阅读全文

AKKA文档(java版)—什么是角色

原文: http://doc.akka.io/docs/akka/2.3.5/general/actors.html 译者:Vitas
2.3 什么是角色?
前面角色系统一节介绍了一群角色如何形成一个层次结构,并且介绍了角色是构建应用程序的最小单位。本节我们将角色拿出来单独介绍,解释一些你在使用它的过程中可能遇到的概念。对于一些更深入的细节,将会在后面的章节中详细介绍。
你可以将角色想象成一个容器,它其中包括状态,行为,一个信箱,子角色以及一个监管策略。所有这些都封装在一个角色引用中。本节的最后介绍一个角色什么时候终结。

阅读全文

Akka文档(java版)-为什么选择Akka

原文: http://doc.akka.io/docs/akka/2.3.6/intro/why-akka.html 译者:Vitas Wang

1.2 为什么选择Akka?

1.2.1 与同类其它产品相比,Akka平台有什么过人之处呢?

Akka 提供可伸缩的实时事务处理能力。

Akka在以下方面提供了一致的运行时和编程模型:

  • 纵向扩展性(并发)
  • 横向扩展性(远程调用)
  • 容错性

由于Akka的高内聚性和连贯的语义,学习和管理就成了一件事。

阅读全文

并发工具类(四)两个线程进行数据交换的Exchanger

简介

Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger用于进行线程间的数据交换。它提供一个同步点,在这个同步点两个线程可以交换彼此的数据。这两个线程通过exchange方法交换数据, 如果第一个线程先执行exchange方法,它会一直等待第二个线程也执行exchange,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。

Exchanger的应用场景

Exchanger可以用于遗传算法,遗传算法里需要选出两个人作为交配对象,这时候会交换两人的数据,并使用交叉规则得出2个交配结果。
Exchanger也可以用于校对工作。比如我们需要将纸制银流通过人工的方式录入成电子银行流水,为了避免错误,采用AB岗两人进行录入,录入到Excel之后,系统需要加载这两个Excel,并对这两个Excel数据进行校对,看看是否录入的一致。代码如下:

阅读全文

return top