直接上一个今天看到的一个demo
volatile boolean isExit ; //这里的关键字不加上的话,这个程序会一直跑下去,但是这个关键字加上了,这个程序会在一定时间内调用System.exit(0);
int exitCount = 0;
int swapCount = 0;
public void tryExit() {
exitCount ++ ;
if(isExit == !isExit) {
System.out.println("被调用了exit(0),exitCount["+exitCount+" 次],swapCount["+swapCount+" 次]");
System.exit(0);
}
}
public void swapValue() {
System.out.println("被调用了swap...");
swapCount ++;
isExit = !isExit ;
}
public static void main(String[] args) {
final TestVolatile2 vo = new TestVolatile2();
Thread exitThread = new Thread(){
@Override
public void run() {
System.out.println("exitThread start...");
while(true) {
vo.tryExit();
}
}
};
exitThread.start();
Thread swapThread = new Thread(){
@Override
public void run() {
System.out.println("swapThread start...");
while (true) {
vo.swapValue();
}
}
};
swapThread.start();
}
结论: 加上了volatile关键字后,每次线程总是会去主线程中获取变量的值,所以isExit==!isExit才会有可能成立。
相关推荐
Java多线程volatile关键字详解 Java多线程volatile关键字详解主要介绍了Java多线程volatile关键字的应用和原理。volatile是一种轻量同步机制,可以确保变量的可见性和顺序性,但不保证原子性。 volatile关键字的...
Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...
### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...
以前我们说过在一些简单的例子中,比如为一个字段赋值或递增该字段,我们需要对线程进行同步,虽然lock可以满足我们的需要,但是一个竞争锁一定会导致阻塞,然后忍受线程上下文切换和调度的开销,在一些高并发和性能...
C++中volatile关键字及常见的误解总结 C++中的volatile关键字是一种类型修饰符,用来修饰变量,表示该变量可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。 volatile关键字的主要作用是提供对...
Java中的Volatile关键字详解是Java中的一种关键字,用于保证线程之间的可见性、原子性和有序性。下面是对Java中的Volatile关键字详解的知识点总结: 一、基本概念 1. 可见性:可见性是一种复杂的属性,因为可见性...
在IT行业中,volatile关键字在编程,尤其是嵌入式系统和多线程编程中扮演着重要的角色。本篇文章将深入探讨volatile关键字的作用,并结合GD32F303单片机的使用场景,来阐述它在实际开发中的应用。 首先,volatile...
volatile关键字是Java语言中的一种机制,用于保证变量在多线程之间的可见性。它是Java.util.concurrent包的核心,没有volatile就没有那么多的并发类供我们使用。本文详细解读一下volatile关键字如何保证变量在多线程...
Java并发编程中,volatile关键字扮演着重要的角色,它是一种轻量级的同步机制,与synchronized相比,volatile在性能上更优,因为它不会导致线程阻塞。在深入理解volatile的关键特性之前,我们需要先了解Java内存模型...
线程安全、volatile关键字、原子性、并发包、死锁、线程池学习笔记
Java中的`volatile`关键字是多线程编程中的一个重要概念,它的主要作用是确保共享变量的可见性和禁止指令重排序。本文将深入探讨`volatile`的关键特性、工作原理以及使用注意事项。 1. 可见性: `volatile`关键字...
在Java编程中,volatile关键字是一个至关重要的概念,尤其在多线程环境下,理解并正确使用volatile是面试时必不可少的知识点。volatile被视为synchronized的一种轻量级实现,但两者在特性上存在显著差异。 首先,...
`volatile`关键字是C++和Java等编程语言中用于处理多线程环境或者与硬件交互时的一个关键特性。它主要用于修饰变量,表明该变量的值可能会在编译器不知情的情况下发生变化,例如由其他线程修改、外部硬件事件影响...
在Java中,volatile关键字是解决多线程问题的重要工具。本文将会详细介绍volatile关键字的原理、使用场景和注意事项。 知识点1:理解多线程问题 在多线程环境下,线程安全问题是最重要的问题。Java内存模型(JMM)...
### 深入解析volatile关键字:保障多线程下的数据一致性与可见性 #### 一、volatile的基本概念 ##### 1.1 可见性 在并发编程领域中,可见性是一个极为重要的概念,它指的是当一个线程修改了一个共享变量的值后,...
volatile关键字可以使变量在多线程之间可见,确保变量的最新值被所有线程看到。 在Java内存模型中,内存分为主内存和工作内存,每个线程有自己的工作内存,对于要操作的数据会从主内存拷贝一份到工作内存中,默认...
内存栅栏和volatile关键字在多线程编程中扮演着至关重要的角色,它们是确保线程安全和正确数据同步的关键机制。本文将深入探讨这两个概念,以及它们如何在.NET环境中工作。 首先,我们要理解的是,现代计算机为了...
2. 使用volatile关键字在多线程环境下:volatile关键字可以用于多线程环境下,保证线程之间操作的可见性和有序性。 四、示例代码 以下是一个示例代码,演示了volatile关键字的使用: ```java public class ...
volatile关键字主要用于解决多线程环境下的共享变量问题,例如,多个线程访问同一个共享变量时,使用volatile关键字可以保证共享变量的内存可见性和禁止指令重排序。volatile关键字也可以用于解决缓存不一致问题,...