技术的转换
在 Flink 中,volatile 是 Java 中的关键字,用于声明变量为可变的并且可以被多个线程同时访问。volatile 关键字可以保证在不同线程中访问同一个变量时,读取到的是最新的值,而不是缓存中的旧值。在 Flink 中,volatile 关键字通常用于实现线程安全的双重检查锁定(double-checked locking)等场景,以确保共享变量的正确性。在 Flink 的代码中,通常可以看到一些使用 volatile 关键字的变量,如 org.apache.flink.streaming.api.graph.StreamConfig#configuration、org.apache.flink.runtime.metrics.groups.JobManagerJobMetricGroup#currentJobStatus 等。这些变量被声明为 volatile 是因为它们需要在多个线程之间共享,并且需要保证其读写的原子性和可见性。
读写的原子性和可见性是多线程编程中的两个概念。
读写的原子性指的是一个操作的执行过程是不可中断的,即要么操作完成,要么没有执行。例如对于一个整型变量的自增操作,如果该操作具有原子性,那么在多线程的情况下,任何一个线程对该变量的自增操作都会被其他线程所感知,且不会存在多个线程同时对该变量进行自增的情况。
标签:变量,电影,推荐,系统,原子,关键字,线程,volatile,多线程 From: https://www.cnblogs.com/V-AK47/p/17173123.html可见性指的是当一个线程修改了共享变量的值时,其他线程能够立即看到这个修改。如果共享变量的可见性不好,即一个线程修改了变量的值,但其他线程没有看到这个修改,那么就会产生线程安全问题。Java中的volatile关键字可以确保共享变量的可见性。在多线程编程中,如果操作不具备原子性和可见性,就需要采取特殊的手段来保证线程安全,例如加锁、使用原子类等。