JAVA ’ 目录归档

《Apache Velocity开发者指南》

欢迎各位光临并发编程网,并发网最近几年一直致力于翻译优秀的技术文章,从未间断,并发网从本月开始计划组织翻译各个技术框架的官方指南,本月组织翻译Apache Velocity官方指南。Velocity是在阿里巴巴和支付宝等公司被广泛使用的一种基于Java的模板引擎,有兴趣翻译的同学请在评论中回复翻译章节和完成时间,翻译完之后提交到并发编程网,网站使用指南请参考:如何投稿

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Apache Velocity开发者指南》


Guava官方文档-RateLimiter类

原文链接 作者:Dimitris Andreou  译者:魏嘉鹏 校对:方腾飞token_bucket

RateLimiter 从概念上来讲,速率限制器会在可配置的速率下分配许可证。如果必要的话,每个acquire() 会阻塞当前线程直到许可证可用后获取该许可证。一旦获取到许可证,不需要再释放许可证。

校对注:RateLimiter使用的是一种叫令牌桶的流控算法,RateLimiter会按照一定的频率往桶里扔令牌,线程拿到令牌才能执行,比如你希望自己的应用程序QPS不要超过1000,那么RateLimiter设置1000的速率后,就会每秒往桶里扔1000个令牌。

com.google.common.util.concurrent.RateLimiter

@ThreadSafe
@Betapublic
abstract class RateLimiter extends Object

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Guava官方文档-RateLimiter类


Java8并发教程:Threads和Executors

原文地址  原文作者:Benjamin Winterberg 译者:张坤

欢迎阅读我的Java8并发教程的第一部分。这份指南将会以简单易懂的代码示例来教给你如何在Java8中进行并发编程。这是一系列教程中的第一部分。在接下来的15分钟,你将会学会如何通过线程,任务(tasks)和 exector services来并行执行代码。

  • 第一部分:Threads和Executors
  • 第二部分:同步和锁

并发在Java5中首次被引入并在后续的版本中不断得到增强。在这篇文章中介绍的大部分概念同样适用于以前的Java版本。不过我的代码示例聚焦于Java8,大量使用lambda表达式和其他新特性。如果你对lambda表达式不属性,我推荐你首先阅读我的Java 8 教程

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java8并发教程:Threads和Executors


Java8中CAS的增强

几天前,我偶然地将之前写的用来测试AtomicInteger和synchronized的自增性能的代码跑了一下,意外地发现AtomicInteger的性能比synchronized更好了,经过一番原因查找,有了如下发现:

在jdk1.7中,AtomicInteger的getAndIncrement是这样的:

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java8中CAS的增强


并发编程模型

原文链接 作者: Jakob Jenkov 译者: 林威建 [weakielin@gmail.com]

并发系统可以采用多种并发编程模型来实现。并发模型指定了系统中的线程如何通过协作来完成分配给它们的作业。不同的并发模型采用不同的方式拆分作业,同时线程间的协作和交互方式也不相同。这篇并发模型教程将会较深入地介绍目前(2015年,本文撰写时间)比较流行的几种并发模型。
阅读全文

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


Java ThreadLocal的使用

原文链接  作者: Jakob Jenkov 译者: 林威建[weakielin@gmail.com]

Java中的ThreadLocal类允许我们创建只能被同一个线程读写的变量。因此,如果一段代码含有一个ThreadLocal变量的引用,即使两个线程同时执行这段代码,它们也无法访问到对方的ThreadLocal变量。
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java ThreadLocal的使用


Java代码到字节码——第一部分

原文地址 作者:James Bloom 译者:张坤

理解在Java虚拟机中Java代码如何别被编译成字节码并执行是非常重要的,因为这可以帮助你理解你的程序在运行时发生了什么。这种理解不仅能确保你对语言特性有逻辑上的认识而且做具体的讨论时可以理解在语言特性上的妥协和副作用。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java代码到字节码——第一部分


为什么我的JVM能实际使用的内存比-Xmx指定的少?

原文链接

作者:Nikita Salnikov-Tarnovski   译者:Amanda    校对:

你好,你能过来看看帮我解决一个奇怪的问题么。”就是这个技术支持案例使我想起写下这篇帖子。眼前的这个问题就是关于不同工具对于可用内存大小检测的差异。

其实就是一个工程师在调查一个应用程序的过高的内存使用情况时发现,尽管该程序已经被指定分配2G堆内存,但是JVM检测工具似乎并不能确定进程实际能用多少内存。例如 jconsole显示可用堆内存为1,963M,然而 jvisualvm 却显示能用2,048M。所以到底哪个工具才是对的,为什么检测结果会出现差异呢?

这确实是个挺奇怪的问题,特别是当最常出现的几种解释理由都被排除后,看来JVM并没有耍一些明显的小花招:

  • -Xmx-Xms是相等的,因此检测结果并不会因为堆内存增加而在运行时有所变化。
  • 通过关闭自适应调整策略(-XX:-UseAdaptiveSizePolicy),JVM已经事先被禁止动态调整内存池的大小。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 为什么我的JVM能实际使用的内存比-Xmx指定的少?


颠覆大数据分析之结论

颠覆大数据分析之结论

译者:吴京润    购书

随着Hadoop2.0到来——被称作YARN的Hadoop新版本——超越Map-Reduce的思想已经稳固下来。就像本章要解释的,Hadoop YARN将资源调度从MR范式分离出来。需要注意的是在Hadoop1.0,Hadoop第一代,调度功能是与Map-Reduce范式绑定在一起的——这意味着在HDFS上惟一的处理方式就是Map-Reduce或它的业务流程。这一点已在YARN得到解决,它使得HDFS数据可以使用非Map-Reduce范式处理。其含义是,从事实上确认了Map-Reduce不是惟一的大数据分析范式,这也是本书的中心思想。 Hadoop YARN允许企业将数据存储在HDFS,并使用专业框架以多种方式处理数据。比如,Spark可以借助HDFS上的数据迭代运行机器学习算法。(Spark已重构为工作在YARN之上,感谢Yahoo的创新精神),还有GraphLab/Giraph可以借助这些数据用来运行基于图的算法。显而易见的事实是,主要的Hadoop发行版已宣布支持Spark(Cloudera的),Storm(Hortonworks的),还有Giraph(Hortonworkds的)。所有的一切,本书一直主张的超越Hadoop Map-Reduce的思想已通过Hadoop YARN得到了验证。本章概述了Hadoop YARN以及不同的框架(Spark/GraphLab/Storm)如何工作在它上面工作。

 
阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 颠覆大数据分析之结论


颠覆大数据分析之实时分析的应用

颠覆大数据分析之实时分析的应用

译者:吴京润    购书

在这一节,我们将看到构建两个应用的步骤:一个工业日志分类系统和一个互联网流量过滤应用。

工业日志分类

随新旧生产工程系统的自动化以及电子工程的发展,大量的机器之间(M2M)的数据正在被生成出来。机器之间的数据可以来自多个不同的源头,包括无线传感器,电子消费设备,安全应用,还有智能家居设备。举个例子,2004年的地震和随后的海啸造就了由海洋传感器构成的海啸预警系统。自2011年的日本东北地区的地震以来,日本已经沿火车轨道安装了许多传感器,帮助探测不寻常的地震活动以便及时关闭火车运行。GE和其它大电子/电气公司拥有巨量的车间生产日志和其它的M2M数据。Splunk、Sumo Logic、Logscape,还有XpoLog是一些专注于M2M数据分析的公司。

这一切是如何组合在一起的:机器对机器的故障分析

这个用例来自电子制造公司。车间里的不同设备,接收输入,执行测试,以非结构化文本形式发送日志,记录测试运行的结果。日志基本上获取了每次测试的参数和它们的值以及输出的结果——这么做的意图就是确认测试是通过还是失败。为便于读者理解要处理和分析什么,下面给出日志文件样本。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 颠覆大数据分析之实时分析的应用


颠覆大数据分析之Storm的设计模式

颠覆大数据分析之Storm的设计模式

译者:吴京润    购书

我们将要学习如何实现基于Storm的一些通用设计模式。设计模式,我们也称之为软件工程意识,是在给定上下文环境中,针对觉设计问题的可重用的通常解决方案。(Gamma et al. 1995)。它们是分布式远程过程调用(DRPCs),持续计算,以及机器学习。

分布式远程过程调用

过程调用为单机运行的程序提供了一个传输控制与数据的灵巧机制。把这一概念扩展到分布式系统中,出现了远程过程调用(RPC)——过程调用的概念可以跨越网络边界。客户机发起一次RPC时发生了下述事件顺序:

  1. 调用环境要么挂起要么忙等待。
  2. 参数被编组并通过网络传输到目的机、服务器或被调用者,也就是程序将要执行的地方。
  3. 参数被整理后,程序在远程节点执行。
  4. 远程节点的程序执行结束时,结果被传回客户机或源。
  5. 客户端程序就像刚从一个本地过程调用返回一样继续执行。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 颠覆大数据分析之Storm的设计模式


使用stream操作表达更高级的数据处理请求, Part 1

使用stream操作表达更高级的数据处理请求,Part 1

原文链接 作者:Raoul-Gabriel Urma 译者:石头狮子(v1.lion@qq.com) 校对:吴京润

没有了集合你会怎么做?几乎每一个Java应用都建立和处理集合。对于许多编程任务而言,这是基础的技术:集合分组和处理数据。例如,你可能想要建立一个银行交易集合来代表用户的账户记录。然后,你想要处理所有的集合找出用户花费了多少金额。尽管集合如此重要,但是Java的实现远非完美。

首先,典型的集合处理模式有点像SQL操作,例如”查找”(查找最大值的交易)或”分组”(编组所有与杂货购买有关的交易)。大部分的数据库可以允许我们声明式地指定这些操作。例如,后面的SQL查询可以让我们找出最高值的交易ID:”SELECT id, MAX(value) from transactions”。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 使用stream操作表达更高级的数据处理请求, Part 1


JVM内部原理

JVM内部原理

原文链接 原文作者:James D Bloom 翻译:梅小西(904516706)  校对:吴京润

 

这篇文章详细描述了Java虚拟机的内在结构。下面这张图来自《The Java Virtual Machine Specification Java SE 7 Edition》,它展示了一个典型的JVM的主要的内部结构。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: JVM内部原理


颠覆大数据分析之Storm简介

颠覆大数据分析之Storm简介

译者:吴京润    购书

之前我们已经极为简单的介绍了Storm。现在我们要对它做一个更详细的了解。Storm是一个复杂事件处理引擎(CEP),最初由Twitter实现。在实时计算与分析领域,Storm正在得到日益广泛的应用。Storm可以辅助基本的流式处理,例如聚合数据流,以及基于数据流的机器学习(译者注:原文是ML,根据上下文判断,此处应是指机器学习,下文相同不再缀述)。通常情况,数据分析(译者注:原文为prestorage analytics,意义应是保存分析结果之前的分析计算)在Storm之上进行,然后把结果保存在NOSQL或关系数据库管理系统(RDBMSs)。以气象频道为例,使用Storm以并行方式处理大数据集(译者注:原文用到munging,意义应是洗数据)并为离线计算持久化它们。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 颠覆大数据分析之Storm简介


颠覆大数据分析之第二章结束语

颠覆大数据分析之第二章结束语

译者:黄经业    购书

本章讨论了一些业务场景,以及它们在BDAS框架中的实现。同时还介绍了什么是BDAS框架,并重点介绍了Spark, Shark,以及Mesos。Spark在那些涉及到优化的场景中非常有用——比如说Ooyala希望基于约束条件来动态地选择最优的CDN,以便提升视频的用户体验。必须注意的是,正如第一章所说的,众所周知,约束及变量过多的优化问题是很难在Hadoop MR中解决的。随机法要更适合Hadoop。不过你应当时刻牢记一点,Hadoop很难解决优化问题指的是它很难高效地实现规模化。

诸如MPI这些传统的并行编程工具或者Spark这类的新范式则非常适用于这类优化的问题,它们能够高效地进行扩展。另有数位研究人员也同时指出,Hadoop并不擅长迭代式机器学习算法,包括发明了Spark的伯克利的研究人员,以及GraphLab的研究人员,还有加州大学圣巴巴拉分校的MapScale团队。Satish Narayana Srirama教授在他的论文中就这个问题进行了深入的讨论(Srirama等2012)。最主要的原因就是它缺少长期存活的MR以及内存编程的支持。每一次MR迭代都要启动新的MR作业,并将数据从HDFS中拷贝到内存里,然后进行迭代,再将数据写回到HDFS,检查迭代是否终止…每次迭代都重复这些会带来显著的开销。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 颠覆大数据分析之第二章结束语


return top