关于java:java并发笔记CompletableFuture

4次阅读

共计 1039 个字符,预计需要花费 3 分钟才能阅读完成。

I、后行产生准则(happens-before)

1、如果一个操作 happens-before 另一个操作,那么第一个操作的执行后果将对第二个操作可见,而且第一个操作的执行程序排在第二个操作之前。
2、两个操作之间存在 happens-before 关系,并不意味着肯定要依照 happens-before 准则制订的程序来执行。如果重排序之后的执行后果与依照 happens-before 关系来执行的后果统一,那么这种重排序并不非法。

3、8 大准则:

程序秩序规定:一个线程内,依照代码程序,书写在后面的操作后行产生于书写在前面的操作;
锁定规定:一个 unLock 操作后行产生于前面对同一个锁 lock 操作;
volatile 变量规定:对一个变量的写操作后行产生于前面对这个变量的读操作;
传递规定:如果操作 A 后行产生于操作 B,而操作 B 又后行产生于操作 C,则能够得出操作 A 后行产生于操作 C;
线程启动规定:Thread 对象的 start() 办法后行产生于此线程的每个一个动作;
线程中断规定:对线程 interrupt() 办法的调用后行产生于被中断线程的代码检测到中断事件的产生;
线程终结规定:线程中所有的操作都后行产生于线程的终止检测,咱们能够通过 Thread.join() 办法完结、Thread.isAlive() 的返回值伎俩检测到线程曾经终止执行;
对象终结规定:一个对象的初始化实现后行产生于他的 finalize() 办法的开始;

4、6 大推理

将一个元素放入一个线程平安的队列的操作 Happens-Before 从队列中取出这个元素的操作;
将一个元素放入一个线程平安容器的操作 Happens-Before 从容器中取出这个元素的操作;
在 CountDownLatch 上的倒数操作 Happens-Before CountDownLatch#await() 操作;
开释 Semaphore 许可的操作 Happens-Before 取得许可操作;
Future 示意的工作的所有操作 Happens-Before Future#get() 操作;
向 Executor 提交一个 Runnable 或 Callable 的操作 Happens-Before 工作开始执行操作;

II、内存可见性

如果一个线程对共享变量的批改,可能被其它线程看到,那么就能阐明共享变量在线程之间是可见的。

 可参照内存模型来了解 

III、根据 happens-before 和内存可见性远离,基于 CompletableFuture 实现的,可编排与隔离工作的并发框架

1、架构图:

2、源码暂不凋谢

正文完
 0