Java并发编程实战:第7章 取消和关闭
1. 任务取消
1.1 任务取消
外部代码,能够将某个操作正常完成之前,将其置入完成状态,那么这个操作就称为可取消的(Cancellable)。
取消操作的原因有很多:
- 用户请求取消。
- 有时间限制的操作,如超时设定。
- 应用程序事件。
- 错误。
- 关闭。
外部代码,能够将某个操作正常完成之前,将其置入完成状态,那么这个操作就称为可取消的(Cancellable)。
取消操作的原因有很多:
任务
就是抽象、离散的工作单元。在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。
其中List、Set、Queue接口分别继承了Collection
接口,Map
本身是一个接口。
同步容器主要包括2类
Vector、Stack
1 | Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是它进行了同步措施。 |
HashTable
1 | HashTable实现了Map接口,它和HashMap很相似,但是HashTable进行了同步处理,而HashMap没有。 |
尽管将所有的状态都存储在公共静态域中,仍然能写出线程安全的程序。
在没有进行全局检查的情况下,封装能够保证类的线程安全性。
设计线程安全类的过程应该包括下面3个基本要素:
其实关键字 synchronized 关键字不仅仅能用于实现原子性或者确定 “临界区(Critical Section)”
同步还有另一个重要的方面:内存可见性(Memory Visibility)。
我们不仅希望防止某个线程正常使用对象状态而另一个线程再同时修改该状态,而且希望确保当一个线程修改了对象状态之后,其他线程能够看到发生状态变化。我们可以通过同步或者类库中内置的同步保证对象安全地发布。
下载资源 jar;https://repo1.maven.org/maven2/org/lucee/jcip-annotations/1.0.0/jcip-annotations-1.0.0.jar
先创建Java Web Module
File
-> New
-> Module...
Java
-> Next
-> Finish
选中创建的 Model
-> 右键选择 Add Framework Support...
-> 选择 Web Application
-> ok
下载资源 jar;https://repo1.maven.org/maven2/org/lucee/jcip-annotations/1.0.0/jcip-annotations-1.0.0.jar
添加 jar 到程序中
多个线程中的操作执行顺序是不可预测的
非线程安全的序列生成器
1 |
|