`

Java volatile的用法

    博客分类:
  • J2SE
 
阅读更多
Java 理论与实践: 正确使用 Volatile 变量

volatile 变量使用指南



http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

另附 双重检查加锁 单例模式

public class Singleton {
	/**
	 * volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量
	 */
	private volatile static Singleton uniqueInstance;

	private Singleton() {
	}

	public static Singleton getInstance() {
		if (uniqueInstance == null) {//检查实例,如果不存在就进入同步区块
			synchronized (Singleton.class) {//注意,只有第一次才彻底执行这里的代码
				if (uniqueInstance == null) {
					uniqueInstance = new Singleton();
				}
			}
		}
		return uniqueInstance;
	}
}

上面的单例模式写法可以大大减少getInstance的时间消耗!

“急切”单例模式
public class Singleton {
	/**
	 * volatile关键词确保:当uniqueInstance变量被初始化成Singleton实例时,多个线程正确地处理uniqueInstance变量
	 */
	private volatile static Singleton uniqueInstance = new Singleton();

	private Singleton() {
	}

	public static Singleton getInstance() {
		return uniqueInstance;
	}
}



分享到:
评论

相关推荐

    Java的Volatile实例用法及讲解

    Java的Volatile实例用法及讲解 Java的Volatile关键字是Java语言中一种特殊的修饰符,在多线程编程中发挥着重要作用。Volatile关键字主要在可见性中发挥作用,保证了变量的可见性,使得变量的变化可以被其他线程立即...

    Java线程:volatile关键字

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 synchronized”;与 synchronized ...

    java volatile关键字使用方法及注意事项

    在上述示例中,`increaseCounter()`方法就存在这个问题,即使使用了volatile,也不能保证线程安全。 4. **VolatileData类示例**:在给出的示例代码中,`VolatileData`类的`counter`变量被声明为volatile。这使得`...

    Java Volatile 变量详解及使用方法

    总结来说,`volatile`变量在Java多线程编程中起着关键作用,它简化了同步代码,提高了效率,但使用时需谨慎,因为它并不保证所有的线程安全需求。正确理解和使用`volatile`,可以帮助开发者编写出更高效、更可靠的...

    java volatile关键字作用及使用场景详解

    例如,在`VolatileTest3`类中,如果没有使用`volatile`修饰`isShutDown`,那么在`shutdown`方法将`isShutDown`设置为`true`之后,其他线程可能仍然继续执行`doWork`方法,因为他们可能没有看到这个更新。使用`...

    Java并发编程:volatile关键字解析

    ### Java并发编程:volatile关键字解析 #### 一、内存模型的相关概念 在深入了解`volatile`关键字之前,我们首先需要理解计算机内存模型的一些基本概念。在现代计算机系统中,CPU为了提高执行效率,会将频繁访问的...

    一文精通Java中的volatile关键字

    Java中的`volatile`关键字是多线程编程中的一个重要概念,它的主要作用是确保共享变量的可见性和禁止指令重排序。本文将深入探讨`volatile`的关键特性、工作原理以及使用注意事项。 1. 可见性: `volatile`关键字...

    volatile用法

    1. `volatile`的基本用法: 当一个变量被声明为`volatile`时,编译器会知道这个变量的值可能在运行时被外部不可预见的因素(比如硬件中断、多线程等)修改。因此,每次访问`volatile`变量时,都会从内存中读取最新...

    Java中的关键字volatile详解

    Java中的关键字volatile详解 一、volatile关键字原理 在Java中,volatile关键字经常用来修饰变量。volatile关键字的作用是使变量在多个线程之间可见。volatile关键字可以保证变量的可见性,但不能保证变量的原子性...

    简单了解java volatile关键字实现的原理

    1. **使用范围**:`volatile`只能修饰变量,而`synchronized`可以修饰方法和代码块。 2. **原子性保证**:`volatile`无法保证操作的原子性,如`i++`操作,而`synchronized`可以确保整个同步块内的操作是原子性的。 ...

    Java中volatile关键字的作用与用法详解

    总的来说,`volatile`关键字在Java并发编程中扮演着重要角色,合理使用它可以有效提高代码的并发性能并减少同步带来的开销。但同时,也应清楚其限制,避免在需要原子性保障或更严格一致性的场景中误用。在设计并发...

    Java并发volatile关键字.docx

    为了确保原子性,可以使用`synchronized`块或Java并发包(java.util.concurrent)中的原子类,如`AtomicInteger`。原子类提供了原子操作的方法,可以在多线程环境下安全地进行类似自增的操作,而无需担心数据一致性...

    Java并发编程系列- volatile

    Java并发编程中的`volatile`关键字是一个非常重要的概念,它用于解决多线程环境下的数据同步问题。`volatile`关键字提供了两种关键特性: 1. **保证可见性**:当一个线程修改了`volatile`变量,这个修改对于其他...

    Java中Volatile的作用实例解析

    当使用 volatile 变量而非锁时,某些习惯用法(idiom)更加易于编码和阅读。此外,volatile 变量不会像锁那样造成线程阻塞,因此也很少造成可伸缩性问题。 在某些情况下,如果读操作远远大于写操作,volatile 变量...

    Java中volatile关键字的含义

    在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候可以万事大吉。  Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 ...

    解析java中volatile关键字

    例如,在`ThreadSave`类的`inscane()`方法中,`j++`操作不是原子性的,即使使用了`volatile`关键字,多个线程同时增加`j`的值时,仍然可能出现数据不一致的问题。在这种情况下,通常需要使用`synchronized`块或`...

    Java基础:volatile详解.pdf

    Java基础:volatile详解 Java基础:volatile详解问:谈谈你对volatile的理解? volatile是Java虚拟机提供的轻量级的同步机制,它有三个特性:保证可见性、不保证原子性、禁止指令重排。 1、volatile保证可见性 ...

    volatile源码分析1

    在深入理解volatile时,我们需要考虑JVM内存模型、处理器缓存以及底层的汇编指令,这有助于我们更好地理解和使用volatile,解决并发编程中的问题。在实际开发中,合理利用volatile可以避免不必要的锁同步,提升程序...

    Java 关键字 volatile 的理解与正确使用

    Java 关键字 volatile 的理解与正确使用 Java 语言中关键字 volatile 被称作轻量级的 synchronized,与 synchronized 相比,volatile 编码相对简单且运行时的开销较少,但能够正确合理地应用好 volatile 并不是那么...

Global site tag (gtag.js) - Google Analytics