JAVA ’ 目录归档

跟着实例学习ZooKeeper的用法: Barrier

分布式Barrier是这样一个类: 它会阻塞所有节点上的等待进程,知道某一个被满足, 然后所有的节点继续进行。

比如赛马比赛中, 等赛马陆续来到起跑线前。 一声令下,所有的赛马都飞奔而出。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 跟着实例学习ZooKeeper的用法: Barrier


跟着实例学习ZooKeeper的用法: 分布式锁

分布式的锁全局同步, 这意味着任何一个时间点不会有两个客户端都拥有相同的锁。

可重入锁Shared Reentrant Lock

首先我们先看一个全局可重入的锁。 Shared意味着锁是全局可见的, 客户端都可以请求锁。 Reentrant和JDK的ReentrantLock类似, 意味着同一个客户端在拥有锁的同时,可以多次获取,不会被阻塞。 它是由类InterProcessMutex来实现。 它的构造函数为:

public InterProcessMutex(CuratorFramework client, String path)

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 跟着实例学习ZooKeeper的用法: 分布式锁


跟着实例学习ZooKeeper的用法: Leader选举

ZooKeeper官方给出了使用zookeeper的几种用途

  • Leader Election
  • Barriers
  • Queues
  • Locks
  • Two-phased Commit
  • 其它应用如Name Service, Configuration, Group Membership

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 跟着实例学习ZooKeeper的用法: Leader选举


Java 注解指导手册 – 终极向导

原文链接 原文作者:Dani Buiza 译者:Toien Liu  校对:深海

编者的话:注解是java的一个主要特性且每个java开发者都应该知道如何使用它。

我们已经在Java Code Geeks提供了丰富的教程, 如Creating Your Own Java Annotations, Java Annotations Tutorial with Custom Annotation 和 Java Annotations: Explored & Explained.

我们也有些文章是关于注解在不同类库中的应用,包括 Make your Spring Security @Secured annotations more DRY和 Java Annotations & A Real World Spring Example.

现在,是时候汇总这些和注解相关的信息到一篇文章了,祝大家阅读愉快。 阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java 注解指导手册 – 终极向导


《C#并发编程经典实例》—— 超时

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

问题
我们希望事件能在预定的时间内到达,即使事件不到达,也要确保程序能及时进行响应。
通常此类事件是单一的异步操作(例如,等待 Web 服务请求的响应)。

解决方案
Timeout 操 作 符 在 输 入 流 上 建 立 一 个 可 调 节 的 超 时 窗 口。 一 旦 新 的 事 件 到 达, 就 重 置 超 时 窗 口。 如 果 超 过 期 限 后 事 件 仍 没 到 达,Timeout 操 作 符 就 结 束 流, 并 产 生 一 个 包 含 TimeoutException 的 OnError 通知。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《C#并发编程经典实例》—— 超时


《C#并发编程经典实例》—— 用限流和抽样抑制事件流

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

问题

有时事件来得太快,这是编写响应式代码时经常碰到的问题。一个速度太快的事件流可导

致程序的处理过程崩溃。

解决方案

Rx 专门提供了几个操作符,用来对付大量涌现的事件数据。Throttle 和 Sample 这两个操 作符提供了两种不同方法来抑制快速涌来的输入事件。

阅读全文


《C#并发编程经典实例》—— 用窗口和缓冲对事件分组

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

问题

有一系列事件,需要在它们到达时进行分组。举个例子,需要对一些成对的输入作出响

应。第二个例子,需要在 2 秒钟的窗口期内,对所有输入进行响应。

阅读全文


《C#并发编程经典实例》—— 发送通知给上下文

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

问题

Rx 尽量做到了线程不可知(thread agnostic)。因此它会在任意一个活动线程中发出通知(例如 OnNext)。

但是我们通常希望通知只发给特定的上下文。例如 UI 元素只能被它所属的 UI 线程控制, 因此,如果要根据 Rx 的通知来修改 UI,就应该把通知“转移”到 UI 线程。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《C#并发编程经典实例》—— 发送通知给上下文


《C#并发编程经典实例》—— 转换.NET事件

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

问题

把一个事件作为 Rx 输入流,每次事件发生时通过 OnNext 生成数据。

解决方案
Observable 类 定 义 了 一 些 事 件 转 换 器。 大 部 分 .NET 框 架 事 件 与 FromEventPattern 兼 容, 对于不遵循通用模式的事件,需要改用 FromEvent。

FromEventPattern 最适合使用委托类型为 EventHandler 的事件。很多较新框架类的事 件都采用了这种委托类型。例如,Progress 类定义了事件 ProgressChanged,这个事件 的委托类型就是 EventHandler,因此,它就很容易被封装到 FromEventPattern:

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《C#并发编程经典实例》—— 转换.NET事件


《C#并发编程经典实例》—— Rx基础

声明:本文是《C#并发编程经典实例》的样章,感谢图灵授权并发编程网站发布样章,禁止以任何形式转载此文。

LINQ 是 对 序 列 数 据 进 行 查 询 的 一 系 列 语 言 功 能。 内 置 的 LINQ to Objects( 基 于 IEnumerable<T>) 和 LINQ to Entities( 基 于 IQueryable<T>) 是 两 个 最 常 用 的 LINQ 提 供 者。另外还有很多提供者,并且大多数都采用相同的基本架构。查询是延后执行(lazily evaluated)的,只有在需要时才会从序列中获取数据。从概念上讲,这是一种拉取模式。 在查询过程中数据项是被逐个拉取出来的。

Reactive Extensions(Rx)把事件看作是依次到达的数据序列。因此,将 Rx 认作是 LINQ to events( 基 于 IObservable<T>) 也 是 可 以 的, 它 与 其 他 LINQ 提 供 者 的 主 要 区 别 在 于, Rx 采用“推送”模式。就是说,Rx 的查询规定了在事件到达时程序该如何响应。Rx 在 LINQ 的基础上构建,增加了一些功能强大的操作符,作为扩展方法。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《C#并发编程经典实例》—— Rx基础


状态模式在领域驱动设计中的使用

原文链接  作者:   译者:陈振阳

领域驱动设计是软件开发的一种方式,问题复杂的地方通过将具体实现和一个不断改进的核心业务概念的模型连接解决。这个概念是Eric Evans提出的,http://www.domaindrivendesign.org/这个网站来促进领域驱动设计的使用。关于领域驱动设计的定义,http://dddcommunity.org/resources/ddd_terms/,这个网站有很多的描述,DDD是一种软件开发的方式:

  1. 对于大多数的软件项目,主要的精力应该在领域和领域的逻辑。
  2. 复杂的领域设计应该基于一个模型。

DDD促进了技术和领域专家之前的创造性的合作,迭代地接近问题的概念核心。注意,在没有领域专家的帮助时,一个技术专家可能不会完全理解一个领域的错综复杂,当然,没有技术专家的帮助,一个领域专家实际上也不能应用它的知识到项目中。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 状态模式在领域驱动设计中的使用


Java IO: 其他字符流(下)

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本小节会简要概括Java IO中的PushbackReader,LineNumberReader,StreamTokenizer,PrintWriter,StringReader,StringWriter。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java IO: 其他字符流(下)


Java IO: 其他字节流(上)

作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com)

本小节会简要概括Java IO中的PushbackInputStream,SequenceInputStream和PrintStream。其中,最常用的是PrintStream,System.out和System.err都是PrintStream类型的变量,请查看Java IO: System.in, System.out, System.err浏览更多关于System.out和System.err的信息。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java IO: 其他字节流(上)


函数式编程 Functional Programming

原文链接

在Java程序员的世界里,第一要素是“类”,而在函数式编程里,第一要素则是“函数”。完全不同的编程理念,确实很难让函数式编程出现在Java工程师日常工作的代码中。

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 函数式编程 Functional Programming


并发性能优化 – 降低锁粒度

原文链接  作者:Adrianos Dadis 译者:买蓉(sky.mairong@gmail.com) 校对:方腾飞

在高负载多线程应用中性能是非常重要的。为了达到更好的性能,开发者必须意识到并发的重要性。当我们需要使用并发时, 常常有一个资源必须被两个或多个线程共享。

在这种情况下,就存在一个竞争条件,也就是其中一个线程可以得到锁(锁与特定资源绑定),其他想要得到锁的线程会被阻塞。这个同步机制的实现是有代价的,为了向你提供一个好用的同步模型,JVM和操作系统都要消耗资源。有三个最重要的因素使并发的实现会消耗大量资源,它们是:

  • 上下文切换
  • 内存同步
  • 阻塞

阅读全文

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 并发性能优化 – 降低锁粒度


return top