一、Happens-before原理(happens-before)1.如果一个操作happens-before另一个操作,那么第一个操作的执行结果将对第二个操作可见,第一个Actions在第二个动作之前按顺序执行。2.两个操作之间存在happens-before关系,并不意味着它们必须按照happens-before原则建立的顺序执行。如果重排后的执行结果与happens-before关系下的执行结果一致,则本次重排不违法。3、八大原则:程序顺序规则:在一个线程中,按照代码顺序,写在前面的操作发生在写在后面的操作之前;加锁规则:unLock操作发生在同一锁操作之前;Volatile变量规则:对一个变量的写操作发生在对该变量的后续读操作之前;转移规则:如果操作A发生在操作B之前,操作B发生在操作C之前,那么操作A可以在操作C中先发生;线程启动规则:Thread对象的start()方法在本线程的每个动作中最先发生;线程中断规则:当检测到被中断线程的代码时,首先调用线程interrupt()方法中断事件的发生;线程终止规则:线程中的所有操作都发生在线程终止检测之前。我们可以通过Thread.join()方法的结束和Thread.isAlive()的返回值检测到线程已经终止执行;对象终止规则:对象的初始化首先发生在其finalize()方法的开头;4、6大推理将一个元素放入线程安全队列的操作发生在将这个元素取出队列的操作之前;将元素放入线程安全容器的操作发生在将这个元素从容器中取出的操作之前;CountDownLatch上的倒计时操作发生在CountDownLatch#await()操作之前;释放信号量权限的操作发生在获取权限的操作之前;FutureHappens所代表的任务的所有操作-BeforeFuture#get()操作;向ExecutorHappens-Before任务提交Runnable或Callable操作,开始执行操作;二、内存可见性如果一个线程修改了一个共享变量,它可以被其他线程看到,那么就意味着这个共享变量在线程之间是可见的。可以参考内存模型来理解三.基于happens-before和memoryvisibilityaway,基于CompletableFuture,一个可以安排和隔离任务的并发框架1.架构图:2.源码暂未公开
