Concurrency
luccs
这个作者很懒,什么都没留下…
展开
-
Atomic Variables 原子变量
java.util.concurrent.atmoic包定义了类,在单一变量上支持原子操作。所有的类有get和set方法,这些将在volatile变量上进行读写。即,在同一变量上set和后续的get有一个happens-before关系。原子compareAndSet 方法也有这些内存持续性功能,就像在整形原子变量上做简单的运算方法。 为了看这个包如何使用的,让我们返回原先演示线程接翻译 2014-06-24 22:57:17 · 797 阅读 · 0 评论 -
Guarded Blocks 保护块
线程经常需要协调它们的活动,最常用的协调方法是保护块。这样的块是以轮询一个条件开始,这个条件值必须是true,在块处理前。为了正确做到这样,有大量的步骤需要遵守。 例如,guardedJoy 是一个方法,直到一个共享变量joy被另外一个线程设置了才会执行。这样的方法,理论上,简单的循环直到条件满足,但是了这样的循环是耗费的,因为它不断地在等待中执行。 public vo翻译 2014-06-25 22:59:00 · 475 阅读 · 0 评论 -
一种常见的并发编程场景的处理
转载地址:http://shentar.me/%e4%b8%80%e7%a7%8d%e5%b8%b8%e8%a7%81%e7%9a%84%e5%b9%b6%e5%8f%91%e7%bc%96%e7%a8%8b%e5%9c%ba%e6%99%af%e7%9a%84%e5%a4%84%e7%90%86/作者:转载 2014-08-04 22:53:04 · 756 阅读 · 0 评论 -
高并发系统设计
转载地址:http://shentar.me/%e8%bd%ac%e9%ab%98%e5%b9%b6%e5%8f%91%e7%b3%bb%e7%bb%9f%e8%ae%be%e8%ae%a1/转载 2014-08-04 22:54:41 · 910 阅读 · 0 评论 -
Executors 执行器
在之前的所有例子中,在一个任务被一个新的线程(被定义为Runnable对象)和和线程自身(被定义为一个线程对象)执行的两个线程有一个紧密联系。这个工作方式对于小型应用很好,但是在大规模应用程序中,从应用程序的其他部分分开县城管理和创建是很有意义的。封装这些功能的对象称为执行器。下面的子章节详细描述了执行器。 1 Executor interface (执行器接口) 定义了三类执行器翻译 2014-06-25 22:55:13 · 382 阅读 · 0 评论 -
Immutable Objects 不可变对象
如果一个对象在创建后它的状态不可变那这个对象被认为是不可变的。对于不可变对象的极大信任使它作为一个合理的策略来创建简单信任的代码而被广泛认可。 不可变对象在并发程序中十分有用。因为它们不能改变状态,它们不会在线程争用中毁坏或者在不一致性错误中被观察。 程序通常不情愿使用不可变对象,因为他们担心创建一个新的对象的成本与适当的时候更新一个对象的成本截然相反。创建对象的影响通常翻译 2014-06-25 22:58:04 · 425 阅读 · 0 评论 -
Fork/Join(分开/联合)
Fork/Join框架式ExecutorService接口的实现,帮助你充分利用多处理器。它被设计成能递归的分解成更小部分工作。目标是使用所有可用的处理能力来提升你的应用的处理能力。 与其他ExecutorService实现一样,fork/join框架在一个线程池中分发任务给工作线程。因为使用一个work-stealing算法是这个框架截然不同。那些已经处理完任务的工作线程可以从其他翻译 2014-06-25 22:53:33 · 510 阅读 · 0 评论 -
活性(Liveness)
并发应用程序及时执行的能力被叫做它的活性。这块描述了最普通的活性问题,死锁(deadlock),接着简单描述了两个其他活性问题“饥饿锁和活锁”; 死锁 死锁描述了一种情形,两个或者更多的线程徐翔阻塞。,互相等待对方。这里是一个例子。 Alphonse和Gaston是好朋友,非常看重礼节。礼节的一个严格规定是当你向一个朋友鞠躬的时候,你必须保持鞠躬状态知道你的朋友向你鞠躬。不翻译 2014-06-25 22:59:41 · 919 阅读 · 0 评论 -
原子访问(Atomic Access)
在编程中,原子动作是一个突然有效地发生。一个原子动作在中途是不能停止的:要不完全执行完,要不一点也不执行。直到原子操作完全执行,它的副作用才会可见。 我们已经看见了自增长表达式,比如c++,不描述一个原子操作。甚至非常简单的表达式可以定义复杂的动作,可以分解为其他的动作。可是,有些动作你可以指定为原子的: 1 引用变量和大多数基本数据类型(除了lon翻译 2014-06-25 23:01:08 · 1783 阅读 · 0 评论 -
High Level Concurrency Objects 高级并发对象
至今,课关注低级API,从最开始已经成为java平台的部分。虽然这些APIs可以胜任非常基本的任务,但是为更多高级任务需要高级构建块。这对于大规模并发程序尤其是真的,充分利用当今的多处理器和多核系统。 在这一节,我们将看到在java平台版本5中介绍的一些高级并发特性。这些特性的大多数在新的java.util.concurrent包中实现。在java 集合框架中也有新的并发数据结构。翻译 2014-06-25 22:56:40 · 521 阅读 · 0 评论 -
Thread Pools 线程池
大多数Executor的实现使用线程池,是由工作线程组成。这种线程与它执行的Runnable和回调函数分开,即单独存在,通常用来执行多任务。 使用工作线程由于线程创建减少了开销。线程对象使用大量的内存,并且在大规模应用程序中,分配和取消分配许多线程对象产生了显著的内存管理开销。 一个普通类型的线程池是大小固定的线程池。这类池有一个指定数量的线程运行。如果一个线程在它仍旧使用翻译 2014-06-25 22:52:03 · 571 阅读 · 0 评论 -
内在锁和同步
同步是建立在一个内部的实体上,被称作内在锁或者监视锁。(同步锁的api中经常涉及这个实体的简单的称作“监视器”)内在锁在同步的两方面都扮演了一个角色:强制占有一个对象的状态和建立happens-before关系,这样基本上可见。每个对象都有一个与之关联的内在锁。按照惯例,一个线程,需要独占和一致的一个对象的字段,在进入这个对象前得需要这个对象的内在锁,当处理完这些字段后,需要释放这些内翻译 2014-06-25 23:00:27 · 561 阅读 · 0 评论 -
Lock Objects 锁对象
同步代码依赖一种简单的可重入锁。虽然这种锁很容易使用,但是有许多局限。许多复杂的锁形式是由java.util.concurrent.locks包支持。我们不详细解释这个包,但是了关注它最重要最基本的接口,Lock。 Lock对象的工作机制与用同步代码的隐式锁很相似。作为隐式锁,只有一个线程能一次拥有一个锁对象。所对象也支持wait/notify机制。,通过它们关联的条件对象。翻译 2014-06-25 22:55:55 · 648 阅读 · 0 评论 -
Concurrent Collections 并发集合
java.util.concurrent包 包含了大量Java 集合框架的补充。这些是最容易分类的,通过接口集合提供: 1 BlockingQueue 阻塞队列 定义了一个先进先出的数据结构,当试图添加进一个满的队列或者从一个空的队列中获取时会阻塞或者超时。 2 ConcurrentMap 并发隐射 java.util.Map的子接口定义了有用的原子操作。这些操作移除或替代翻译 2014-06-25 22:54:32 · 733 阅读 · 0 评论 -
Executor Interfaces 执行器接口
java.util.Concurrent包定义了三类执行器接口: 1 Executor,一个简单的执行器支持启动新的任务 2 ExecutorService,Executor的子接口,增加了管理个体任务和执行器自身的生命周期的特性。 3 ScheduledExecutorService,ExecutorService的子接口,支持将来和/或者周期性任务翻译 2014-06-24 22:58:36 · 577 阅读 · 0 评论 -
Atomic Variables 原子变量
ava.util.concurrent.atmoic包定义了类,在单一变量上支持原子操作。所有的类有get和set方法,这些将在volatile变量上进行读写。即,在同一变量上set和后续的get有一个happens-before关系。原子compareAndSet 方法也有这些内存持续性功能,就像在整形原子变量上做简单的运算方法。 为了看这个包如何使用的,让我们返回原先演示线程接口翻译 2014-06-24 23:01:17 · 682 阅读 · 0 评论 -
Spring之HTTP Message Conversion(HTTP消息转换)
传递给这些方法和从这些方法(getForObject(), postForLocation(), 和 put() 返回的对象翻译 2014-11-10 15:26:29 · 4338 阅读 · 0 评论