Home
malinkang
Cancel

《Java并发编程实战》第14章构建自定义的同步工具

类库包含了许多存在状态依赖性的类,例如FutureTask、Semaphore和BlockingQueue等。在这些类的一些操作中有着基于状态的前提条件,例如,不能从一个空的队列中删除元素,或者获取一个尚未结束的任务的计算结果,在这些操作可以执行之前,必须等到队列进入“非空”状态,或者任务进入“已完成”状态。 创建状态依赖类的最简单方法通常是在类库中现有状态依赖类的基础上进行构造。如果类库...

《Java并发编程实战》第13章显式锁

在Java 5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile。Java5.0增加了一种新的机制:ReentrantLock。ReentrantLock并不是一种替代内置锁的方法,而是当内置加锁机制不适用时,作为一种可选择的高级功能。 13.1 Lock与ReentrantLock Lock接口中定义了一组抽象的加锁操作。与内置加锁机...

《Java并发编程实战》第8章线程池的使用

本章将介绍对线程池进行配置与调优的一些高级选项,并分析在使用任务执行框架时需要注意的各种危险,以及一些使用Executor的高级示例。 8.1 在任务与执行策略之间的隐性耦合 8.2 设置线程池的大小 8.3 配置ThreadPoolExecutor 8.3.1 线程的创建于销毁 8.3.2 管理队列任务 ThreadPoolExecutor允许提供一个BlockingQue...

《Java并发编程实战》第6章执行任务

大多数并发应用程序都是围绕“任务执行”来构造的,任务通常是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种自然的事务边界来优化错误恢复过程,以及提供一种自然的并行工作结构来提升并发性。 6.1 在线程中执行任务 6.2 Executor框架 6.2.3 线程池 “在线程池中执行任务”比“为每个任务分配一个线程”优势更多。通过重用现...

《Java并发编程实战》第7章取消与关闭

任务和线程的启动很容易,在大多数时候,我们都会让它们运行直到结束,或者让它们自行停止。然后,有时候我们希望提前结束任务或线程,或许是因为用户取消了操作,或者应用程序需要被快速关闭。 要使任务和线程能安全、快速、可靠地停止下来,并不是一件容易的事。Java没有提供任何机制来安全地终止线程。但它提供了中断(Interruption),这是一种协作机制,能够使一个线程终止另一个线程的当前工作。 ...

《Java并发编程实战》第5章基础构建模块

Java平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer)。本章将介绍其中一些最有用的开发构建模块,特别是在Java5.0和Java6中引入的一些新模块,以及在使用这些模块来构造并发应用程序时的一些常用模式。 5.1 同步容器类 同步容器类包括Vector和Hashtable,二者都是早期JDK的...

《Java并发编程实战》第3章对象的共享

我们已经知道了同步代码块和同步方法可以确保以原子的方式执行操作,但一种常见的误解是,认为关键字synchronized只能用于实现原子性或者确定临界区。同步还有另一个重要的方面:内存可见性(Memory Visibility)。我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。如果没有同步,那么这种情...

《Java并发编程实战》第2章线程安全性

一个对象是否需要是线程安全的,取决于它是否被多个线程访问。这指的是在程序中访问对象的方式,而不是对象要实现的功能。要使得对象时线程安全的,需要采用同步机制来协同对对象可变状态的访问。如果无法实现协同,那么可能会导致数据破坏以及其他不该出现的结果。 当多个线程访问某个状态变量并且其中有一个线程执行写入操作时,必须采用同步机制来协同这些线程对变量的访问。Java中的主要同步机制是关键字sy...

ButterKnife源码分析

功能介绍 在Android中,我们从布局文件中获取一个view一般通过findViewById方法来操作,当一个界面里view过多的时候,我们需要花费大量的时间来写这些样板代码。ButterKnife用于来简化这个操作的,只需要在相应的View上加一个注解,框架就会注入这些字段。 基本使用 在Activity中使用 class ExampleActivity extends Activ...

工厂模式

以制作披萨为例 public static Pizza orderPizza(String type){ Pizza pizza = new Pizza(); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } 添加更多的Pizza,需要把Piz...