Java并发编程实战:第8章 应用线程池

1. 应用线程池

1.1 在任务与执行策略之间的隐性耦合

Executor 框架可以将任务的提交任务的执行策略解耦开来。Executor 框架为制定和修改执行策略提供了相当大的灵活性,但并非所有的任务都能适用所有的执行策略。 有些类型的任 务需要明确地指定执行策略, 包括:

  1. 依赖性任务:简单来说就是,提交的 task 是需要依赖 其它任务 的, task 就类似有某种枷锁一样,浑身不自在。

    • 大多数任务都是独立的,它们不依赖于其他任务的执行时序、 执行结果或其他效果。
    • 当在线程池中执行独立的任务时, 可以随意地改变线程池的大小和配置,这些修改只会对执行性能产生影响。
    • 如果提交给线程池的任务需要依赖其他的任务, 那么就隐含地给执行策略带来了约束, 此时必须小心地维持这些执行策略,以避免产生活跃性问题。
阅读更多

Java并发编程实战:第7章 总结

  1. 任务、线程、服务以及应用程序在生命周期结束时的问题,可能会导致向它们引入复杂的设计和实现。
  2. Java 没有提供具有明显优势的机制来取消活动或者终结线程。
阅读更多

Java并发编程实战:第7章 取消和关闭

1. 任务取消

1.1 任务取消

外部代码,能够将某个操作正常完成之前,将其置入完成状态,那么这个操作就称为可取消的(Cancellable)

取消操作的原因有很多:

  1. 用户请求取消。
  2. 有时间限制的操作,如超时设定。
  3. 应用程序事件。
  4. 错误。
  5. 关闭。
阅读更多

Java并发编程实战:第6章 总结

  • 围绕任务的执行来构造应用程序,可以简化开发,便于同步。
  • Executor框架有助于我们在任务的提交与任务的执行策略之间进行解耦,同时还支持很多不同类型的执行策略。
阅读更多

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

1. 在线程中执行任务

1.1 在线程中执行任务

  • 多数并发程序是围绕任务进行管理的,所谓任务就是抽象、离散的工作单元。
  • 正常情况下,服务器应该兼顾良好的吞吐量和快速的响应性
  • 在负荷状况下,应该平缓的劣化,不应该快速失败,为了达到这些策略,应该有一个明确的任务执行策略。
阅读更多

Java并发编程实战:第1-5章 总结

  1. 所有并发问题都归结为如何协调访问并发状态,可变状态越少,保证线程安全就越容易。
  2. 尽量将域声明为 final 类型,除非它们的需要是可变的。
阅读更多

Java并发编程实战:第5章 构建块

1. 同步容器

1.1 同步容器

  • 在Java的集合容器框架中,主要有四大类别:List、Set、Queue、Map。

  • 其中List、Set、Queue接口分别继承了Collection接口,Map本身是一个接口。

  • 同步容器主要包括2类

    1. Vector、Stack

      1
      2
      Vector实现了List接口,Vector实际上就是一个数组,和ArrayList类似,但是它进行了同步措施。
      Stack也是一个同步容器,它的方法也用synchronized进行了同步,它实际上是继承于Vector类。
    2. HashTable

      1
      HashTable实现了Map接口,它和HashMap很相似,但是HashTable进行了同步处理,而HashMap没有。
阅读更多

Java并发编程实战:第4章 组合对象

1. 设计线程安全的类

尽管将所有的状态都存储在公共静态域中,仍然能写出线程安全的程序。

在没有进行全局检查的情况下,封装能够保证类的线程安全性。

设计线程安全类的过程应该包括下面3个基本要素:

  • 确定对象状态是由哪些变量构成的;
  • 确定限制状态变量的不变约束;
  • 制定一个管理并发访问对象状态的策略。
阅读更多

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

1. 可见性

其实关键字 synchronized 关键字不仅仅能用于实现原子性或者确定 “临界区(Critical Section)”

同步还有另一个重要的方面:内存可见性(Memory Visibility)。

我们不仅希望防止某个线程正常使用对象状态而另一个线程再同时修改该状态,而且希望确保当一个线程修改了对象状态之后,其他线程能够看到发生状态变化。我们可以通过同步或者类库中内置的同步保证对象安全地发布。

阅读更多

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

1. 什么是线程安全性

下载资源 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

阅读更多

Java并发编程实战:第1章 简介

下载资源 jar;https://repo1.maven.org/maven2/org/lucee/jcip-annotations/1.0.0/jcip-annotations-1.0.0.jar

添加 jar 到程序中

1. 线程不安全

多个线程中的操作执行顺序是不可预测的

非线程安全的序列生成器

1
2
3
4
5
6
7
8
9
10
11
12
@NotThreadSafe
class UnsafeSequence {
private int value;

public UnsafeSequence(int value) {
this.value = value;
}

public int next() {
return this.value++;
}
}
阅读更多