Happens-Before原则:如果操作A Happens-Before操作B,那么操作A的结果对操作B是可见的,并且操作A在操作B之前执行。这确保了当一个线程修改了某个变量的值,其他线程能够看到这个修改后的值,从而避免了数据不一致的问题。Happens-Before的关键规则:
- 程序次序规则:在一个线程内,按照控制流顺序,书写在前面的操作先行发生于书写在后面的操作。
- 管程锁定规则:一个unlock操作先行发生于后面对同一个锁的lock操作。这确保了锁的释放对于获取锁的线程是可见的。
- volatile变量规则:确保volatile变量的修改对其他线程是立即可见的。
- 线程启动规则:启动线程的操作先行发生于线程中的任何操作。
- 线程终止规则:线程中的所有操作都先行发生于线程的终止,线程终止操作(包括正常的执行结束或者抛出未捕获的异常)对任何线程都是可见的。
多线程编程的三大特性
1)原子性(Atomicity):
原子性是指一个或多个操作作为一个整体来执行,中途不会被其他线程打断。在多线程环境中,原子性确保一个操作要么完全执行,要么完全不执行,不会出现只执行一部分的情况。这有助于避免线程间的数据竞争和不一致状态。
2)可见性(Visibility):
可见性是指当一个线程修改共享变量的值后,其他线程能够立即看到这个修改。由于多线程环境中的缓存和内存模型,一个线程对共享变量的修改可能不会立即对其他线程可见。可见性确保线程之间的共享数据始终保持一致,从而防止数据不一致和线程安全问题。
3)有序性(Ordering):
有序性是指多线程环境下,程序执行的顺序性得到保证。处理器和编译器可能会对指令进行重排序以提高性能,但这种重排序可能导致多线程程序的行为变得不可预测。有序性要求指令的执行顺序符合程序员的预期,确保内存访问操作的顺序一致,从而防止因重排序导致的线程安全问题。
标签:理论,编程,可见,修改,线程,确保,操作,多线程 From: https://www.cnblogs.com/fchy822/p/18108362