java 性能处理
文章平均质量分 50
luccs
这个作者很懒,什么都没留下…
展开
-
活性(Liveness)
并发应用程序及时执行的能力被叫做它的活性。这块描述了最普通的活性问题,死锁(deadlock),接着简单描述了两个其他活性问题“饥饿锁和活锁”;死锁死锁描述了一种情形,两个或者更多的线程徐翔阻塞。,互相等待对方。这里是一个例子。Alphonse和Gaston是好朋友,非常看重礼节。礼节的一个严格规定是当你向一个朋友鞠躬的时候,你必须保持鞠躬状态知道你的朋友向你鞠躬。不...原创 2014-06-06 23:58:21 · 283 阅读 · 0 评论 -
Guarded Blocks 保护块
2014-06-07 00:53:53 · 91 阅读 · 0 评论 -
Immutable Objects 不可变对象
广泛认可。 不可变对象在并发程序中十分有用。因为它们不能改变状态,它们不会在线程争用中毁坏或者在不一致性错误中被观察。 程序通常不情愿使用不可变对象,因为他们担心创建一个新的对象的成本与适当的时候更新一个对象的成本截然相反。创建对象的影响通常被过高评估,会抵消与不可变量有关联的效率。这些由于垃圾收集而减少开销和代码消除,需要它去防止可变对象变坏。 下面的子章节演示了谁的实例是可变的并从它衍生出不可变实例的一课。这样做,它们为这种转换给出了一般的规则并且展示了不可变对象的一些2014-06-07 01:56:07 · 113 阅读 · 0 评论 -
High Level Concurrency Objects 高级并发对象
2014-06-07 02:21:00 · 80 阅读 · 0 评论 -
Lock Objects 锁对象
个包,但是了关注它最重要最基本的接口,Lock。 Lock对象的工作机制与用同步代码的隐式锁很相似。作为隐式锁,只有一个线程能一次拥有一个锁对象。所对象也支持wait/notify机制。,通过它们关联的条件对象。 锁对象超过瘾式锁的最大优点是它们能撤回试图获取一个锁。tryLock方法会立即撤回如果发现锁是不可用的或者时间超时(如果有时间限制)。lockInterruptibly 方法撤回,如果另外一个线程发了一个中断在获取到锁之前。 让我们使用锁对象解决活性(Liven2014-06-07 02:45:16 · 98 阅读 · 0 评论 -
Executors 执行器
2014-06-07 02:56:03 · 88 阅读 · 0 评论 -
Executor Interfaces 执行器接口
原创 2014-06-08 00:59:39 · 104 阅读 · 0 评论 -
Thread Pools 线程池
原创 2014-06-08 00:59:23 · 82 阅读 · 0 评论 -
Fork/Join(分开/联合)
的应用的处理能力。 与其他ExecutorService实现一样,fork/join框架在一个线程池中分发任务给工作线程。因为使用一个work-stealing算法是这个框架截然不同。那些已经处理完任务的工作线程可以从其他正忙的线程中抢断任务。 这个框架的核心是ForkJoinPool类,一个AbstractExecutorService 类的扩展。ForkJoinPool 实现了核心work-stealing算法的实现并可以执行ForkJoinPool流程。 基本用法原创 2014-06-08 00:59:09 · 72 阅读 · 0 评论 -
Concurrent Collections 并发集合
2014-06-08 00:58:02 · 114 阅读 · 0 评论 -
Atomic Variables 原子变量
2014-06-08 01:26:03 · 94 阅读 · 0 评论 -
Concurrent Random Numbers 并发随机数
alRandom 代替Math.random()带来了较少的连接,最终是更好的饿表现。 所有你需要做的是调用ThreadLocalRandom.current(),之后调用它的方法中的一个取回随机数。这里是一个例子: int r = ThreadLocalRandom.current() .nextInt(4, 77);原创 2014-06-08 01:37:45 · 211 阅读 · 0 评论 -
活性(Liveness)
;死锁死锁描述了一种情形,两个或者更多的线程徐翔阻塞。,互相等待对方。这里是一个例子。Alphonse和Gaston是好朋友,非常看重礼节。礼节的一个严格规定是当你向一个朋友鞠躬的时候,你必须保持鞠躬状态知道你的朋友向你鞠躬。不幸的是,这中规定没有考虑到这种可能性两个朋友同时向对方鞠躬。这个应用例子,死锁,模拟了这种可能。 public class Deadlock { static class Friend { private final S原创 2014-06-06 23:58:21 · 113 阅读 · 0 评论 -
java nio 开发笔记
知我们,传回一组selectionkey,我们读取这些key,就会获得刚刚注册的socketchannel,然后从这些channel中读取数据,肯定可以得到,然后处理数据原创 2014-03-23 11:23:48 · 89 阅读 · 0 评论 -
Guarded Blocks 保护块
线程经常需要协调它们的活动,最常用的协调方法是保护块。这样的块是以轮询一个条件开始,这个条件值必须是true,在块处理前。为了正确做到这样,有大量的步骤需要遵守。 例如,guardedJoy 是一个方法,直到一个共享变量joy被另外一个线程设置了才会执行。这样的方法,理论上,简单的循环直到条件满足,但是了这样的循环是耗费的,因为它不断地在等待中执行。 public void...2014-06-07 00:53:53 · 98 阅读 · 0 评论 -
Immutable Objects 不可变对象
如果一个对象在创建后它的状态不可变那这个对象被认为是不可变的。对于不可变对象的极大信任使它作为一个合理的策略来创建简单信任的代码而被广泛认可。 不可变对象在并发程序中十分有用。因为它们不能改变状态,它们不会在线程争用中毁坏或者在不一致性错误中被观察。 程序通常不情愿使用不可变对象,因为他们担心创建一个新的对象的成本与适当的时候更新一个对象的成本截然相反。创建对象的影响通常...2014-06-07 01:56:07 · 140 阅读 · 0 评论 -
High Level Concurrency Objects 高级并发对象
至今,课关注低级API,从最开始已经成为java平台的部分。虽然这些APIs可以胜任非常基本的任务,但是为更多高级任务需要高级构建块。这对于大规模并发程序尤其是真的,充分利用当今的多处理器和多核系统。 在这一节,我们将看到在java平台版本5中介绍的一些高级并发特性。这些特性的大多数在新的java.util.concurrent包中实现。在java 集合框架中也有新的并发数据结构。...2014-06-07 02:21:00 · 122 阅读 · 0 评论 -
Lock Objects 锁对象
同步代码依赖一种简单的可重入锁。虽然这种锁很容易使用,但是有许多局限。许多复杂的锁形式是由java.util.concurrent.locks包支持。我们不详细解释这个包,但是了关注它最重要最基本的接口,Lock。 Lock对象的工作机制与用同步代码的隐式锁很相似。作为隐式锁,只有一个线程能一次拥有一个锁对象。所对象也支持wait/notify机制。,通过它们关联的条件对象。...2014-06-07 02:45:16 · 177 阅读 · 0 评论 -
Executors 执行器
在之前的所有例子中,在一个任务被一个新的线程(被定义为Runnable对象)和和线程自身(被定义为一个线程对象)执行的两个线程有一个紧密联系。这个工作方式对于小型应用很好,但是在大规模应用程序中,从应用程序的其他部分分开县城管理和创建是很有意义的。封装这些功能的对象称为执行器。下面的子章节详细描述了执行器。 1 Executor interface (执行器接口) 定义了三类执行器...2014-06-07 02:56:03 · 158 阅读 · 0 评论 -
Concurrent Collections 并发集合
java.util.concurrent包 包含了大量Java 集合框架的补充。这些是最容易分类的,通过接口集合提供: 1 BlockingQueue 阻塞队列 定义了一个先进先出的数据结构,当试图添加进一个满的队列或者从一个空的队列中获取时会阻塞或者超时。 2 ConcurrentMap 并发隐射 java.util.Map的子接口定义了有用的原子操作。这些操作移除或替...2014-06-08 00:58:02 · 184 阅读 · 0 评论 -
Fork/Join(分开/联合)
Fork/Join框架式ExecutorService接口的实现,帮助你充分利用多处理器。它被设计成能递归的分解成更小部分工作。目标是使用所有可用的处理能力来提升你的应用的处理能力。 与其他ExecutorService实现一样,fork/join框架在一个线程池中分发任务给工作线程。因为使用一个work-stealing算法是这个框架截然不同。那些已经处理完任务的工作线程可以从其他...原创 2014-06-08 00:59:09 · 77 阅读 · 0 评论 -
Thread Pools 线程池
大多数Executor的实现使用线程池,是由工作线程组成。这种线程与它执行的Runnable和回调函数分开,即单独存在,通常用来执行多任务。 使用工作线程由于线程创建减少了开销。线程对象使用大量的内存,并且在大规模应用程序中,分配和取消分配许多线程对象产生了显著的内存管理开销。 一个普通类型的线程池是大小固定的线程池。这类池有一个指定数量的线程运行。如果一个线程在它仍旧使用...原创 2014-06-08 00:59:23 · 234 阅读 · 0 评论 -
Executor Interfaces 执行器接口
java.util.Concurrent包定义了三类执行器接口: 1 Executor,一个简单的执行器支持启动新的任务 2 ExecutorService,Executor的子接口,增加了管理个体任务和执行器自身的生命周期的特性。 3 ScheduledExecutorService,ExecutorService的子接口,支持将来和/或者周期...原创 2014-06-08 00:59:39 · 119 阅读 · 0 评论 -
Atomic Variables 原子变量
java.util.concurrent.atmoic包定义了类,在单一变量上支持原子操作。所有的类有get和set方法,这些将在volatile变量上进行读写。即,在同一变量上set和后续的get有一个happens-before关系。原子compareAndSet 方法也有这些内存持续性功能,就像在整形原子变量上做简单的运算方法。 为了看这个包如何使用的,让我们返回原先演示线程...2014-06-08 01:26:03 · 151 阅读 · 0 评论 -
java nio 开发笔记
java nio 原理 NIO有一个主要的类Selector 类似观察者 只要我们把需要探知的socketchannel 告诉socket ,我们接着做别的事情,当有事情发生的时候,他就会通知我们,传回一组selectionkey,我们读取这些key,就会获得刚刚注册的socketchannel,然后从这些channel中读取数据,肯定可以得到,然后处理数据...原创 2014-03-23 11:23:48 · 85 阅读 · 0 评论 -
疑问和练习:并发
cute。可是,使用Thread 对象这种方式是没有意义的。如果一个对象直接从Thread实例化,它的run方法不会做任何事情。你可以用一个有用的run方法定义Thread的子类。但是这样的类实现的功能,executor不会使用。 练习: 1 编译并运行BadThreads.java public class BadThreads { static String message; private static class Correcto原创 2014-06-08 13:48:09 · 90 阅读 · 0 评论