JAVA ’ 目录归档

深入理解G1垃圾收集器

G1 GC是Jdk7的新特性之一、Jdk7+版本都可以自主配置G1作为JVM GC选项;作为JVM GC算法的一次重大升级、DK7u后G1已相对稳定、且未来计划替代CMS、所以有必要深入了解下:

不同于其他的分代回收算法、G1将堆空间划分成了互相独立的区块。每块区域既有可能属于O区、也有可能是Y区,且每类区域空间可以是不连续的(对比CMS的O区和Y区都必须是连续的)。这种将O区划分成多块的理念源于:当并发后台线程寻找可回收的对象时、有些区块包含可回收的对象要比其他区块多很多。虽然在清理这些区块时G1仍然需要暂停应用线程、但可以用相对较少的时间优先回收包含垃圾最多区块。这也是为什么G1命名为Garbage First的原因:第一时间处理垃圾最多的区块。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 深入理解G1垃圾收集器


JAVA语言规范-线程和锁章节之同步、等待和通知

原文链接  本文是Oracle官方《Java语言规范》的译文

JAVA语言规范:线程和锁

1 同步

JAVA编程语言提供了线程间通信的多种机制。这些方法中最基本的是同步化,此方法是使用监视器实现的。JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视器。一次仅有一个线程可能在监视器上持有锁。尝试锁住该监视器的任何其他线程被阻塞,直到它们可以再该监视器上获得一个锁。线程t可以多次锁住特别的监视器;每个解锁将一个加锁操作的作用反转来了。

synchronized语句计算了一个对象的引用;然后它尝试在该对象的监视器上执行加锁操作,并不进一步继续,直到锁操作已经成功完成。在加锁操作被执行完后,会执行synchronized语句体。如果语句体的执行没有完成(正常或突然)。那么将在相同的监视器上自动执行相同的解锁操作。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JAVA语言规范-线程和锁章节之同步、等待和通知


在java 7中捕获多个异常

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)

java 7使得我们能够在同一个catch语句块中捕获多种不同的异常,这也叫做多重异常捕获。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 在java 7中捕获多个异常


Java 8新的时间日期库的20个使用示例

原文链接 作者:Javin Paul 译者:之诸暇

除了lambda表达式stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务示例来学习如何使用Java 8的这套API。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 8新的时间日期库的20个使用示例


Java 7中的Try-with-resources

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)
Try-with-resources是java7中一个新的异常处理机制,它能够很容易地关闭在try-catch语句块中使用的资源。
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 7中的Try-with-resources


基本的try-cathc-finally异常处理

原文链接 作者:Jakob Jenkov 译者:fangqiang08(fangqiang08@gmail.com)

这一小节概述了try-catch-finally 语句是怎样处理错误的,文中的例子是Java的,但是同样的规则也适用于C#。java和C#中异常的唯一区别就是C#中没有已检查异常。已检查异常和未检查异常将在后面小节更加详细地介绍。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 基本的try-cathc-finally异常处理


JAVA面试700问(六)

原文地址 译者:olive(yhfolive@gmail.com)

1.wait(),notify()和notifyAll()的作用是什么?

  • wait():使当前线程停止,直到另一个线程调用notify()方法或notifyAll()方法.。
  • notify():唤醒这个对象的监视器上等待的一个线程。
  • notifyAll():将引发wait()状态的所有的线程变为就绪状态,所有的线程继续执行。这些线程将基于优先级以及基于JVM选择来执行。
  • 注意:这三个方法在被调用之前必须获得对象的锁。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JAVA面试700问(六)


JAVA异常处理

原文链接 作者:Jakob Jenkov  译者:fangqiang08(fangqiang08@gmail.com)

JAVA异常处理能够让你的程序更加方便、巧妙地处理错误。异常处理对于写出具有鲁棒性的JAVA程序、组件是非常重要的,但是这也经常被我们所忽视。当java程序中的一个错误发生时,经常导致一个异常被抛出。你怎么抛出、捕获、处理异常是重要的。有多种不同的方式来处理异常。但不是所有的方法都是同样有效以及能够确保安全的。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JAVA异常处理


《七周七并发模型》第五章Actor总结

购买本书 作者:Paul Butcher   译者:黄炎  出品方:图灵  出版社:人民邮电出版社 (感谢图灵授权并发编程网发布此文)

5.5 复习

Smalltalk的设计者、面向对象编程之父Alan Kay曾经这样描述面向对象的本质①:很久以前,我在描述“面向对象编程”时使用了“对象”这个概念。很抱歉这个概念让许多人误入歧途,他们将学习的重心放在了“对象”这个次要的方面。
真正主要的方面是“消息”……日文中有一个词ma,表示“间隔”,与其最为相近的英文或许是“ interstitial”。创建一个规模宏大且可生长的系统的关键在于其模块之间应该如何交流,而不在于其内部的属性和行为应该如何表现。这段话也概括了使用actor模型进行编程的精髓——我们可以认为actor模型是面向对象模型在并发编程领域的扩展。 actor模型精心设计了消息传输和封装的机制,强调了面向对象的精髓,可以说actor模型非常“面向对象”。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《七周七并发模型》第五章Actor总结


Guava 是个风火轮之基础工具(2)

前言

Guava 是 Java 开发者的好朋友。虽然我在开发中使用 Guava 很长时间了,Guava API 的身影遍及我写的生产代码的每个角落,但是我用到的功能只是 Guava 的功能集中一个少的可怜的真子集,更别说我一直没有时间认真的去挖掘 Guava 的功能,没有时间去学习 Guava 的实现。直到最近,我开始阅读 Getting Started with Google Guava,感觉有必要将我学习和使用 Guava 的一些东西记录下来。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Guava 是个风火轮之基础工具(2)


嵌入Groovy

原文链接  译者: 李璟(jlee381344197@gmail.com)

(本站正在翻译groovy系列文章,有兴趣同学可以加入我们)

Groovy就其本身而言,在不同的场景下都算是一门非常不错的编程语言,特别是在与Java混用的环境下,Groovy显得更加强大。出于这种考虑,Groovy被设计成非常轻量级,并且易于嵌入到任何Java应用系统中。

目前主要有3种方法将Groovy与Java集成起来,细节会在下文中讨论。

还有一种可选方案是,如果你确实需要使用其他脚本语言,可以利用Bean Scripting Framework将任何脚本语言集成到你的Java代码中(虽然我们难以想象这么做的原因)。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 嵌入Groovy


采用Java 8中Lambda表达式和默认方法的模板方法模式

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

模板方法模式是“四人帮”(译者注:Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides)所著《Design Patterns book》一书中所描述的23种设计模式其中的一种,该模式旨在:

“Define the skeleton of an algorithm in an operation, deferring some steps to subclasses.

TemplateMethod lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure”。

即模板方法定义一个算法的架构,并将某些步骤推迟到子类中实现。模板方法允许子类在不改变算法架构的情况下,重新定义算法中某些步骤。

为了以更简单的术语描述模板方法,考虑这个场景:假设在一个工作流系统中,为了完成任务,有4个任务必须以给定的执行顺序执行。在这4个任务中,不同工作流系统的实现可以根据自身情况自定义任务的执行内容。

模板方法可以应用在上述场景中:将工作流系统的4个核心任务封装到抽象类当中,如果任务可以被自定义,则将可自定义的任务推迟到子类中实现。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 采用Java 8中Lambda表达式和默认方法的模板方法模式


一个Java 8中简单Lambda表达式程序

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

我尝试过把Lambda表达式融入到我的代码中,下面的代码例子是此次尝试的结果。对于那些完全不知道Lambda表达式的Java程序员,我强烈建议在继续阅读之前,浏览一下这篇文章

Ok,现在你已经熟悉Lambda表达式了(在阅读过推荐的Lambda入门文章之后),那我们现在开始学习一个我认为很好的Lambda表达式的例子。

考虑一下这种场景:某些操作在执行之前需要做预处理,执行之后需要做后期处理。待执行的操作会随着行为的不同而变化。预处理会提取出这个操作所需的必要参数,后期处理做一些清理的工作。

我们来看看如何利用接口与接口的匿名实现类模拟这个场景。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 一个Java 8中简单Lambda表达式程序


Groovy模板引擎上(基础模板介绍)

原文链接 作者:groovy团队  译者:树下偷懒的蚁

1.简介
Groovy支持多种方式动态的生成文本譬如:GStrings, printf(基于Java5),MarkupBuilder 。除此之外,模板框架则是非常适用基于静态模板生成文本的应用程序。

2.模板框架

在Groovy中,模板框架包含TemplateEngine抽象基类(引擎必须实现),Template接口(引擎生成的模板必须实现)。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Groovy模板引擎上(基础模板介绍)


Predicate和Consumer接口– Java 8中java.util.function包下的接口

原文链接 作者:   Mohamed Sanaulla  译者: 李璟(jlee381344197@gmail.com)

早先我写了一篇《函数式接口》,探讨了部分Java 8中函数式接口的用法。我也提及了Predicate接口属于java.util.function包,在这篇文章中,我将展示如何应用Predicate接口和Consumer接口。

阅读全文


return top