Archive for the ‘ JAVA ’ Category

Java设计模式:观察者

原文链接 译者:秦建平

简单来说,观察者模式=发布者+订阅者。

下面是一个有关猎头的典型的例子。在下面这张图当中有两个角色:猎头和寻找工作的人。找工作的人向猎头订阅,告知自己希望得到一份工作,当有新的工作机会的时候,猎头就会把这个信息通知给曾经向他订阅过的人。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java设计模式:观察者

了解 CMS 垃圾回收日志

原文地址   作者: poonam 译者:严亮 校对:梁海舰

在CMS GC 时,使用参数-XX:+PrintGCDetails-XX:+PrintGCTimeStamps 会输出很多日志信息,了解这些信息可以帮我们更好的调整参数,以获得更高的性能。

我们来看下在JDK1.4.2_10 中CMS GC日志示例:

39.910: [GC 39.910: [ParNew: 261760K->0K(261952K), 0.2314667 secs] 262017K->26386K(1048384K), 0.2318679 secs]
新生代使用 (ParNew 并行)回收器。新生代容量为261952K,GC回收后占用从261760K降到0,耗时0.2314667秒。(译注:262017K->26386K(1048384K), 0.2318679 secs 表示整个堆占用从262017K 降至26386K,费时0.2318679)

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 了解 CMS 垃圾回收日志

处理JSON的Java API :JSON的简介

原文链接  作者:Jitendra Kotamraju   译者:撒木

处理JSON的各种解析、生成、处理、转换和查询的JAVA API

JSON (JavaScript Object Notation)是一种轻量级的、基于文本的、完全独立于语言的数据交换格式。它非常方便人们和机器的阅读和书写。JSON 有两种结构类型的表现方式对象和数组。对象是名/值对的无序集合。数组是值(value)的有序集合。值的类型可以是字符串(在双引号中)、数字(整数或浮点数)、逻辑值(true或false)、数组(在方括号中)、对象(在花括号中)、null。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 处理JSON的Java API :JSON的简介

并发工具类(一)等待多线程完成的CountDownLatch

简介

CountDownLatch 允许一个或多个线程等待其他线程完成操作。

应用场景

假如有这样一个需求,当我们需要解析一个Excel里多个sheet的数据时,可以考虑使用多线程,每个线程解析一个sheet里的数据,等到所有的sheet都解析完之后,程序需要提示解析完成。在这个需求中,要实现主线程等待所有线程完成sheet的解析操作,最简单的做法是使用join。代码如下:

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 并发工具类(一)等待多线程完成的CountDownLatch

Java创建线程安全的方法

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

首先来看一个问题:

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


public class MyCount {
  private static int counter = 0;

  public static int getCount(){
    return counter++;
  }
}

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java创建线程安全的方法

一个api的 rt 大涨问题排查

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

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

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

chart_2_

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

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 一个api的 rt 大涨问题排查

Java线程状态图

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

threads2

 

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java线程状态图

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

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

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

什么是监听器?

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

Java-Monitor

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

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 监听器-java同步的基本思想

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中通过加入了对并行支持又进一步增强它们。 Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Fork and Join: Java也可以轻松地编写并发程序

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

第一章节
Java初体验

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

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

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

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 7: 全面教程-第一章节: Java初体验

Java网络教程-基础

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

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

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

1.Java IO 教程

2.Java NIO 教程

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

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

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java网络教程-基础

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

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

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

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

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

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JVM优化系列-第二部分-编译器

Java 正则表达式

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

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

正则表达式

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

正则表达式示例

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

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);

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 正则表达式

原子循环计数器

感谢同事[孙棋]的投稿

现实当中很多场景,需要进行轮训服务,比如轮训在10个日志文件当中写日志,在10台机器上轮训的去调用以实现负载均衡,常规的做法,如tomcat的Poller线程轮训选择,就采用

Math.abs(pollerRotater.incrementAndGet()) % pollers.length

此地需要取原子自增的绝对值模以poller线程数,那是否有更好的实现呢?
Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 原子循环计数器

并发编程 Promise, Future 和 Callback

在并发编程中,我们通常会用到一组非阻塞的模型:Promise,Future 和 Callback。其中的 Future 表示一个可能还没有实际完成的异步任务的结果,针对这个结果可以添加 Callback 以便在任务执行成功或失败后做出对应的操作,而 Promise 交由任务执行者,任务执行者通过 Promise 可以标记任务完成或者失败。 可以说这一套模型是很多异步非阻塞架构的基础。

这一套经典的模型在 Scala、C# 中得到了原生的支持,但 JDK 中暂时还只有无 Callback 的 Future 出现,当然也并非在 JAVA 界就没有发展了,比如 Guava 就提供了ListenableFuture 接口,而 Netty 4+ 更是提供了完整的 Promise、Future 和 Listener 机制,在 Netty 的官方文档 Using as a generic library 中也介绍了将 Netty 作为一个 lib 包依赖,并且使用 Listenable futures 的示例。在实际的项目使用中,发现 Netty 的 EventLoop 机制不一定适用其他场景,因此想去除对 EventLoop 的依赖,实现一个简化版本。

Read more

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 并发编程 Promise, Future 和 Callback

return top