目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

存档: 2020 年 03 月 (19)

控制并发流程的工具类

什么是控制并发流程?  控制并发流程的工具类,作用就是帮助开发者更容易得让线程之间合作。  让线程之间相互配合,来满足业务逻辑(按照预想的方式并发执行)。 比如:让线程 A 等待线程 B 执行完毕再执行等合作策略。 控制并发流程工具类纵览 CountDownLatch  直译 倒数门栓,类似于过山车,人满才会发车。  执行流程如下: 1. 线程开始运行 2. 进入等待,倒数结束之前,一直处于`等待`状态 3. 等待的过程中进行倒数(减) 4. 倒数结束,线程`继续`工作。 CountDownLatch 主要方法概览 * CountDownLatch(int count):仅有一个构造函数,参数 count 为需要倒数的数值。 * await():调用 await() 方法的线程会被挂起,它会等待直到 count 值为 0 才继续执行。 * countDown():将 count 值减1,直到为0时,等待的线程会被唤醒。 CountDownLatch 用法 * 一个线程等待多个线程都执行完毕,再继续自己的工作。 一等多 * 多个线程等待某个线程的信号,同时开始执行。 多等一 *....

Concurrent Container

Vector、Hashtable Vector 特点  类似一个线程安全的 ArrayList * 大量容器操作方法都采用同步方法 Vector<String> vector = new Vector<>(); vector.add("test"); System.out.println(vector.get(0)); Hashtable 特点  类似一个线程安全的 HashMap * 大量容器操作方法都采用同步方法 Hashtable<String, String> hashtable = new Hashtable<>(); hashtable.put("a", "80%"); System.out.println(hashtable.get("a")); Collections.synchronizedXXX()  虽然这两个类不是线程安全的,但是可以用 Collections.synchronizedList(new ArrayList<Integer>())、Conllections.synchroniz....

C

发展史  1989 年 C 被称为 ANSI C,也被称为 C89。  1990 年被 ISO 采纳为国际标准,称为 ISO C。也被称为C90。  ANSI C == C89 == C90 美国国家标准学会( American National Standards Institute) 国际标准化组织(International Standardization Organization) 特点 语言简洁、紧凑,使用方便灵活; 运算符丰富; 数据类型丰富,具有现代语言的各种数据结构; 具有结构化的控制语句; 语法限制不太严格,程序设计自由度大; C 语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作; 生成目标代码质量高,程序执行效率高; 用 C 语言编写的程序可移植性好(与汇编语言比)。 编译环境准 Linux * gcc Windows * gcc (MinGW) 安装步骤 下载 安装过程省略… 配置用户环境变量 * 将 E:\Tools\MinGW\bin 加入 PATH * 将 E:\Tools\MinGW\in....

Immutable

不变性(Immutable)  如果对象在被创建后,状态就不能被修改,那么它就是不可变的。  具有不变性的对象一定是线程安全的,我们不需要对其采取任何二外的安全措施,也能保证线程安全。 示例:person 对象,age、name 都不能再变。 /** * 描述: 不可变的对象,演示其他类无法修改这个对象,public也不行 */ public class Person { final int age = 18; String alice = new String("Alice");//这样就破坏了不可变性 final String name = alice; final TestFinal testFinal = new TestFinal(); public static void main(String[] args) { Person person = new Person(); person.alice = "44"; System.out.println(person.name); } } final 的作用 类防止被继承,方法防止被重写,变量防止被修改 天生是线程安全的....

CAS

CAS 简介  compare and swap  一种思想、一种用来实现线程安全的算法。  同时也是一种 CPU 指令: compare and swap(比较和交换),一种不会被打断的操作组合。 实现思路  我认为V的值应该是A,如果是的话我就把它修改成B,如果不是A(说明被别人修改过),那我就不修改了,避免多人同时修改导致出错。  CAS 有三个操作数:内存值V、预期值A、要修改的值B,当且仅当预期值 A 和内存值 V 相同时,才将内存值修改为 B,否则什么都不做。最后返回现在的值。 * CPU 的特殊指令保证了原子性 CAS 等价代码(Java) /** * 描述: Java 代码 模拟CAS操作,等价代码 */ public class SimulatedCAS { private volatile int value; //整个方法作用相当于 CPU 的一条指令(CAS 指令) public synchronized int compareAndSwap(int expectedValue, int newValue) { int oldValue = value; i....

Lock

Lock 简介、地位、作用  锁是一种工具, 用于控制对共享资源的访问。  Lock 和 synchronzied,这两个是最常见的锁,它们都可以达到线程安全的目的,但是在使用上和功能上又有较大的不同。  Lock 并不是用来代替 synchronized 的,而是当使用 synchronized 不适合或不足以满足要求的时候,来提供高级功能的。  Lock 接口最常见的实现类是 ReentrantLock. 为什么需要 Lock? synchronized 的痛点 效率低:锁的释放情况少(等待 IO 时候也不释放锁,无法中途跳出,白白浪费 CPU 时间片),试图获得锁时不能设置超时(死锁的成因之一)、不能中断一个正在试图获得锁的线程。 不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的。 无法知道是否成功获取到锁。 Lock 主要方法介绍  在 Lock 中声明了四个方法来获取锁。 lock() tryLock() tryLock(long time, TimeUnit unit) lockInterruptibly() lock()....

Decode Base64

该文章已经加密。