`

多线程之volatile

    博客分类:
  • java
阅读更多

 

//volatile 保证线程变量的透明
public class Volatil {
 volatile int x =0; //线程共有内存变量,可获取最后一次写的值
 private int y = 0;
 
  private void write() {
   x = 5;
   y = 1;
  }
   
  private void read() {
   int dummy = y;
   while (x != 5) {
    System.out.println("..." + y + " dummy=" + dummy); //dummy与y的值不相等
   }
  }

 public static void main(String[] args) throws Exception {
  final Volatil v = new Volatil();
  Thread t1 = new Thread(
   new Runnable() {
    public void run() {
     v.write();
    }
   }
  );
  Thread t2 = new Thread(
   new Runnable() {
    public void run() {
     v.read();
    }
   }
  );
  
  t2.start();
  t1.start();

  t1.join();
  t2.join();
  System.out.println("x="+v.x + "  y="+v.y);
  System.out.println("***** over ***");
  
 }

}

分享到:
评论

相关推荐

    学习Java多线程之volatile域

    Java多线程中的volatile关键字是Java提供的一个较弱的同步机制,用于解决多线程环境下的数据一致性问题。volatile确保了变量在多个线程之间的可见性,并限制了指令重排序,但并不保证原子性。 首先,理解Java内存...

    Linux C中多线程与volatile变量

    综上所述,`volatile`在Linux C多线程编程中主要用于解决共享变量的可见性问题,但在处理多线程同步时,还需要结合其他的同步机制,如互斥锁(`mutex`)、条件变量等,以确保线程安全。理解`volatile`的关键在于它是...

    Java线程:volatile关键字

    volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。 正确使用 volatile 变量的条件是:对变量的写操作不依赖于当前值,以及该变量...

    Java多线程之volatile关键字及内存屏障实例解析

    总结来说,volatile关键字在Java多线程编程中起着关键作用,它提供了轻量级的同步机制,通过内存屏障保证了变量的可见性和有序性,避免了多线程环境下数据不一致的问题。但需要注意的是,volatile不能保证操作的原子...

    并发编程基础知识,java内存模型及多线程、volatile

    ### 并发编程基础知识,Java内存模型及多线程、volatile #### Java内存模型(JMM) Java内存模型(Java Memory Model, JMM)是Java并发编程的基础之一,它定义了一套规则来保证线程之间的数据可见性和一致性。当程序...

    深入探讨Java多线程中的volatile变量共6页.pd

    Java多线程编程是开发高并发应用的关键技术之一,而volatile关键字在其中扮演着至关重要的角色。本资料《深入探讨Java多线程中的volatile变量》将带你深入理解这个概念,全面解析其工作原理和实际应用。 volatile...

    java多线程之赛马程序实验8多线程练习下载进度

    本实验"java多线程之赛马程序实验8多线程练习下载进度"聚焦于如何利用多线程来模拟实际场景中的下载进度显示。在这一过程中,我们将探讨Thread类的`run`和`start`方法,以及如何通过进度条来可视化表示下载过程。 ...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    - `volatile`关键字:确保多线程环境下的变量读取始终是最新的值,避免缓存导致的问题。 - `Interlocked`类:提供原子操作,如增加、减小、交换等,避免竞态条件。 5. **异步编程模型**:C#从4.0版本开始引入了...

    java多线程编程之慎重使用volatile关键字

    在Java多线程编程中,volatile关键字扮演着重要的角色,它确保了被声明为volatile的变量在多个线程之间的可见性。然而,尽管volatile能够提供一定程度的线程安全,但并不能保证所有操作都是原子性的。这正是为什么在...

    C# 多线程实例多线程实例多线程实例

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的语言中,它提供了丰富的多线程支持。本文将深入探讨C#中的多线程实例,以帮助开发者理解如何有效地利用多核处理器资源,提高程序的执行效率。 多...

    单线程与多线程的区别

    相比之下,**多线程**允许程序同时执行多个线程,每个线程可以独立地执行任务。这使得程序能更有效地利用CPU资源,提高响应速度和并发能力。例如,在一个多线程应用中,一个线程可以处理用户输入,而另一个线程则...

    多线程系列相关的技术要点

    4. Java多线程学习(三)volatile关键字 5. Java多线程学习(四)等待/通知(wait/notify)机制 6. Java多线程学习(五)线程间通信知识点补充 7. Java多线程学习(六)Lock锁的使用 8. Java多线程学习(七)...

    深入探讨Java多线程中的volatile变量

    Java多线程中的volatile变量是实现线程间通信的关键机制之一。它主要用于解决并发环境下的可见性和有序性问题,但不保证原子性。在多线程编程中,当多个线程共享同一变量时,可能会遇到数据不一致的问题,因为每个...

    Java多线程 volatile关键字详解

    Java多线程volatile关键字详解 Java多线程volatile关键字详解主要介绍了Java多线程volatile关键字的应用和原理。volatile是一种轻量同步机制,可以确保变量的可见性和顺序性,但不保证原子性。 volatile关键字的...

    java多线程的讲解和实战

    - `volatile`关键字:用于标记共享变量,确保多线程环境下的可见性和有序性,但不保证原子性。 - `join()`方法:让当前线程等待另一个线程完成其执行。 4. **线程优先级与调度**:Java的`Thread`类提供了设置线程...

    java多线程Demo

    在多线程环境下,如果一个变量被多个线程共享且只进行读写操作,可以使用volatile保证数据的一致性。 9. sleep(), yield(), interrupt(): - sleep()方法使当前线程暂停指定的时间,然后继续执行。 - yield()方法...

    多线程面试题

    volatile确保了多线程环境下的变量可见性和有序性,但不保证原子性。 5. **死锁**:当两个或更多线程互相等待对方释放资源时,就会发生死锁。避免死锁的方法包括避免循环等待、设置超时、使用死锁检测算法等。 6. ...

    JAVA多线程编程技术PDF

    volatile确保变量在多线程环境中的可见性和有序性,避免缓存一致性问题。 此外,线程间通信也是多线程编程的重要方面。Java提供了wait(), notify()和notifyAll()方法,这些方法用于在线程间交换信息,但必须在同步...

    深入多线程之:内存栅栏与volatile关键字的使用分析

    以前我们说过在一些简单的例子中,比如为一个字段赋值或递增该字段,我们需要对线程进行同步,虽然lock可以满足我们的需要,但是一个竞争锁一定会导致阻塞,然后忍受线程上下文切换和调度的开销,在一些高并发和性能...

Global site tag (gtag.js) - Google Analytics