归档之于 ‘ 2014 年8 月

Java创建线程安全的方法

原文链接 译者:秦建平 校对:方腾飞

首先来看一个问题:

下面这个方法是线程安全的吗?如何才能让这个方法变成线程安全的?

[code lang=”java”]

public class MyCount {
private static int counter = 0;

public static int getCount(){
return counter++;
}
}
[/code]

阅读全文

JVM性能优化(三):垃圾收集

原文地址,译文地址,译者:Greenster

Java平台的垃圾收集机制显著提高了开发者的效率,但是一个实现糟糕的垃圾收集器可能过多地消耗应用程序的资源。在Java虚拟机性能优化系列的第三部分,Eva Andreasson向Java初学者介绍了Java平台的内存模型和垃圾收集机制。她解释了为什么碎片化(而不是垃圾收集)是Java应用程序性能的主要问题所在,以及为什么分代垃圾收集和压缩是目前处理Java应用程序碎片化的主要办法(但不是最有新意的)。

垃圾收集(GC)的目的是释放那些不再被任何活动对象引用的Java对象所占用的内存,它是Java虚拟机动态内存管理机制的核心部分。在一个典型的垃圾收集周期里,所有仍然被引用的对象(因此是可达的)都将被保留,而那些不再被引用的对象将被释放、其所占用的空间将被回收用来分配给新的对象。

为了理解垃圾收集机制和各种垃圾收集算法,首先需要知道关于Java平台内存模型的一些知识。

阅读全文

并发网系列文章集

本文列出了并发编程网站上的所有系列文章,方便大家阅读

JAVA:

Java ByteCode

Java Virtual Machine

阅读全文

一个api的 rt 大涨问题排查

感谢同事[空蒙]投递此稿

mtop是移动接入网关平台,对客户端暴露api,后端接api实际的应用服务,有HSF,也有http的服务端。

之前进行了机房从杭州搬迁到上海,在搬迁的过程中,其中一个api的rt突然大涨,(之前平均的约210ms)

chart_2_

分析具体的原因了,当时正机房搬迁,首先考虑的就是是否此影响,是否发生了跨机房调用的导致,当时把整个杭州的后端服务全部干掉,确认没有跨机房调用,但rt还是没有降低,仍旧很高。 阅读全文

Java线程状态图

下图很好的描述了Java的线程状态。

threads2

 

阅读全文

监听器-java同步的基本思想

原文地址  作者: X Wang   译者:庞俊涛

如果你在大学学习过操作系统,你可能还记得监听器在操作系统中是很重要的概念。同样监听器在java同步机制中也有使用,本文通过类比的方法来解释“监听器”的基本思想。

什么是监听器?

监听器可以看成是包含了一间特殊房间的建筑,这间特殊的房间在同一个时间只能被一个客人(线程)拥有,通常这间房间包含了一些数据和代码。

Java-Monitor

如果一个客人想拥有这间特殊的房间,他不得不首先在走廊(进入集)中等待着,然后调度器根据一些调度算法(eg:FIFO 先进先出)选择一个。如果这个客人因为某些原因暂停悬挂着,则会被放到等待房间`,同时也被安排稍后重新进入这个特殊的房间,就像上面图片所展示的那样,在这个建筑里有个3个房间。

阅读全文

Fork and Join: Java也可以轻松地编写并发程序

原文地址   作者:Julien Ponge 译者:iDestiny

资源下载:

Java SE 7

Sample Code(Zip)

如今,多核处理器在服务器,台式机及笔记本电脑上已经很普遍了,同时也被应用在更小的设备上,比如智能手机和平板电脑。这就开启了并发编程新的潜力,因为多个线程可以在多个内核上并发执行。在应用中要实现最大性能的一个重要技术手段是将密集的任务分隔成多个可以并行执行的块,以便可以最大化利用计算能力。

处理并发(并行)程序,一向都是比较困难的,因为你必须处理线程同步和共享数据的问题。对于java平台在语言级别上对并发编程的支持就很强大,这已经在Groovy(GPars), Scala和Clojure的社区的努力下得以证明。这些社区都尽量提供全面的编程模型和有效的实现来掩饰多线程和分布式应用带来的痛苦。Java语言本身在这方面不应该被认为是不行的。Java平台标准版(Java SE) 5 ,和Java SE 6引入了一组包提供强大的并发模块。Java SE 7中通过加入了对并行支持又进一步增强它们。 阅读全文

Java 7: 全面教程-第一章节: Java初体验

第一章节
Java初体验

 
开发一个Java程序关系到写代码,编译成字节码(bytecode), 和运行字节码。作为一个Java项目开发者将要一直重复做这些事情,所以做这个的时候你要感到舒适是很重要的。而此章节主要目标是让你趁此机会体验Java软件的开发过程。

写代码的关键不仅仅是要让它运做,还要让它方便阅读和维护,此章节介绍了Java 代码的规格。还有,自从聪明的开发者们使用了集成开发环境(Integrated Development Environment,简称IDEs) 使开发变得更简单了,所以此章节的最后一个小节给予了一些Java IDEs的使用建议。

1.1 第一个Java程序
1.2 Java代码规格
1.3 集成开发环境(IDEs)

并发已不再是语言层面上的事情了

原文链接  译者:张军 校对:方腾飞

本文将并发和内存管理做了个类比。最近有一个说法是因为现代工程师几乎总是面对计算机集群编程,所以我们需要用于构建分布式系统的工具。这就意味着我们需要在语言层面支持分布式系统开发。像GO和Erlang这样的语言其优势正好符合这个观点。

GO和Erlang可能最终会流行,但我不认为是这个原因。分布式系统开发并不会成为每个应用开发者日常工作的一部分,因为那将会是件非常痛苦的事情。在某种程度上,我想今天发生的事情是因为缺乏良好的分布式计算框架,而迫使应用去重新实现一些分布式系统原语。但这种情况不会一直存在,而必将有一些框架提供不同的编程模型,在弹性机器池上处理分布和并发问题。

MapReduce已经解决了这个问题。MapReduce编程几乎都是单线程的,并发是由框架来管理,另外有助于你写好MapReduce程序的原因是,有很多用户级别(user-level)的并发原语,并且MapReduce是高度并行的。 阅读全文

Java网络教程-基础

原文地址   译者:贾毅  校对:方腾飞

Java提供了非常易用的网络API,调用这些API我们可以很方便的通过建立TCP/IP或UDP套接字,在网络之间进行相互通信,其中TCP要比UDP更加常用,但在本教程中我们对这两种方式都有说明。

在网站上还有其他三个与Java网络相关的教程,如下:

1.Java IO 教程

2.Java NIO 教程

3.Java服务器多线程教程 (参与翻译可以联系我们)

尽管Java网络API允许我们通过套接字(Socket)打开或关闭网络连接,但所有的网络通信均是基于Java IO类 InputStreamOutputStream实现的。 阅读全文

JVM优化系列-第二部分-编译器

作者:Eva Andreasson    原文链接  译者:sooerr   校对:赵峰

JVM性能优化系列中,第二篇章里Java编译器是主要部分。Eva Andreasson介绍了不同类型的编译器,并且就客户端、服务器端、分层编译进行了性能对比。她也总结了JVM优化的一些概况,例如死代码的消除、代码内嵌和循环优化。

Java编译器是Java著名的跨平台特性的根源。软件开发者写出了一个理想的Java应用程序,在编写高效、平稳的代码的背后,正是编译器可以保证其运行在潜在的目标平台。不同种类的编译器可以满足多种应用程序的需要,产生出具体期望的性能测试结果。你对编译器了解的越多,例如工作原理和可用种类,那么你将更具备Java应用程序调优的能力。

JVM调优系列的第二篇文章展示并说明了各种虚拟机编译器的不同点。同时,我也会讨论使用Just-In-Time (JIT) 编译器可以实现的共同的优化点。(JVM总揽和介绍请看本系列第一部分”JVM性能调优PART1″)

阅读全文

Java 正则表达式

原文地址   作者:Jakob Jenkov 译者:严亮

Java 提供了功能强大的正则表达式API,在java.util.regex 包下。本教程介绍如何使用正则表达式API。

正则表达式

一个正则表达式是一个用于文本搜索的文本模式。换句话说,在文本中搜索出现的模式。例如,你可以用正则表达式搜索网页中的邮箱地址或超链接。

正则表达式示例

下面是一个简单的Java正则表达式的例子,用于在文本中搜索 http://

[code lang=”java”]
String text =
"This is the text to be searched " +
"for occurrences of the http:// pattern.";
String pattern = ".*http://.*";
boolean matches = Pattern.matches(pattern, text);
System.out.println("matches = " + matches);
[/code]

阅读全文

return top