学会放下包袱,热爱单例

原文链接   译者:曾维朝

企业应用程序与移动应用程序有着截然不同的要求。你启动一次企业应用程序,它会连续运行数月或数年。另一方面,大部分手机应用可能是被正在无聊排队或者坐公交车的用户启动的,它们经常连续运行不超过几分钟,这就意味着移动应用程序必须即时开启,而启动一个企业应用程序则需要足够长的时间。

对于企业应用,依赖注入和早期验证是非常重要的, Spring为此提供了极大的便利。 但是别欺骗自己,Spring是好,但它不是万金油。尤其在崇尚快速启动、低内存消耗、避免接口的移动开发领域。

阅读全文

Java锁的种类以及辨析(三):阻塞锁

下载作者:山鸡

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

阅读全文

Java设计模式:装饰者模式

原文链接 译者:秦建平

装饰者模式可以给已经存在的对象动态的添加能力。下面,我将会用一个简单的例子来演示一下如何在程序当中使用装饰者模式。

1.装饰者模式
让我们来假设一下,你正在寻找一个女朋友。有很多来自不同国家的女孩,比如:美国,中国,日本,法国等等,他们每个人都有不一样的个性和兴趣爱好,如果需要在程序当中模拟这么一种情况的话,假设每一个女孩就是一个Java类的话,那么就会有成千上万的类,这样子就会造成类的膨胀,而且这样的设计的可扩展性会比较差。因为如果我们需要一个新的女孩,就需要创建一个新的Java类,这实际上也违背了在程序开发当中需要遵循的OCP(对扩展开放,对修改关闭)原则。
让我们来重新做另外一种设计,让每一种个性或者兴趣爱好成为一种装饰从而可以动态地添加到每一个女孩的身上。

阅读全文

Quartz教程五:SimpleTrigger

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

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

SimpleTrigger可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。比如,你有一个trigger,你可以设置它在2015年1月13日的上午11:23:54准时触发,或者在这个时间点触发,并且每隔2秒触发一次,一共重复5次。

根据描述,你可能已经发现了,SimpleTrigger的属性包括:开始时间、结束时间、重复次数以及重复的间隔。这些属性的含义与你所期望的是一致的,只是关于结束时间有一些地方需要注意。

重复次数,可以是0、正整数,以及常量SimpleTrigger.REPEAT_INDEFINITELY。重复的间隔,必须是0,或者long型的正数,表示毫秒。注意,如果重复间隔为0,trigger将会以重复次数并发执行(或者以scheduler可以处理的近似并发数)。

阅读全文

Java锁的种类以及辨析(二):自旋锁的其他种类

下载

作者:山鸡

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

阅读全文

面向大众的移动技术:签名,封装和发布Android app

作者: Andrew Glover 原文地址 译者:Ahaha  校对:赵峰

面向大从的移动打桩其它四篇文章地址(校对添加):

(一)、android简介

(二)、轻轻一划,在android中为手势编码

(三)、Android 应用程序生命周期中的活动与图标

(四)、Overheard Word 的单词和手势

添加一个多选择quiz到你的Android手机app,然后用一个安全数字证书签名

用网络逻辑,内容为王。但是对与手机用户来说,交互规则才是王道。对移动app静态信息设计在减少,并且游戏化正在增多。这个月Andrew Glover决定通过将一个多选择的quiz特性加入到一个示例app(Overheard Word,前一篇介绍的。) 中来介绍Android移动开发。之后他将展示给你如何生成一个数字证书和如何发布和如何提升你的在Google Play或者Amazon Appstore上已经签名的app。

阅读全文

Java网络教程之Socket

原文地址  译者:贾毅

当我们想要在Java中使用TCP/IP通过网络连接到服务器时,就需要创建java.net.Socket对象并连接到服务器。假如希望使用Java NIO,也可以创建Java NIO中的SocketChannel对象。

创建Socket

下面的示例代码是连接到IP地址为78.64.84.171服务器上的80端口,这台服务器就是我们的Web服务器(www.jenkov.com),而80端口就是Web服务端口。

Socket socket = new Socket("78.46.84.171", 80);

我们也可以像如下示例中使用域名代替IP地址:

Socket socket = new Socket("jenkov.com", 80);

阅读全文

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性能优化系列

阅读全文

return top