java并发 多线程-关于java线程中的volatile关键字

问题描述

关于java线程中的volatile关键字

下面的代码中flag具有原子性,加上volatile修饰后具有可视性,能够保证setFlag和getFlag方法的同步,但是不明白与其他持有当前对象锁的同步方法是否能保持同步(就是otherMethod这样的方法)

public class volatileTest {
private volatile boolean flag;
public void setFlag(boolean falg){ this.flag = flag;}
public boolean getFlag(){return flag;}

public synchronized void otherMethod()
{
    //do some thing
}

}

时间: 2024-08-28 10:21:36

java并发 多线程-关于java线程中的volatile关键字的相关文章

Java 并发/多线程教程(九)-线程安全和共享资源

         本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!       代码被多个线程同时调用是安全的,那么就称之为线程安全.如果一段代码是线程安全的,那么它没有竞态条件.竞态条件只有发生在多个线程更新共享资源.因些,清楚的知道线程执行时什么资源是共享的非常重要. 本地变量        本地变量存储在每个线程自己的栈里,这就意味着本地变量从不与其他线程共享.也就是说本地变量是线程安全的,下面是关于线程安全的本地变量的一个

Java 并发/多线程教程(十)-线程安全及不可变性

本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!        只有在多个线程访问相同的资源时,才会出现竞态条件,并且一个或多个线对相同的资源进操作.如果多个线程读取相同的资源条件,就不会发生这种情况.        我们通过使共享变量不可以变来确保共享变量不被别的线程修改,因此这样的共享变量是线程安全的,下面有个例子: public class ImmutableValue{       private int value =

Java 并发/多线程教程(五)-相同线程

       本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!        相同线程是一并发框架模型,是一个单线程系统向外扩展成多个单线程的系统.这样的结果就是多个单线程并行运行. 为什么是单线程系统?         你也许会感到好奇,为什么当今还有人设计单线程系统.单线程系统之所以这么普及,是因为单线程系统相对于多线程并发系统更为简单.单线程系统不需要与其他线程共享任何数据.这就使得单线程系统可以使用非并发的数据结构,可以更

Java 并发/多线程教程(七)-创建和启动java线程

      本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 创建和启动线程 在java中创建一个线程如下: Thread thread = new Thread(); 调用方法start()来启动一个线程: thread.start();         这个例子没有指定线程执行任何代码,线程将会在启动之后停止.         有两种方式指定线程应该执行什么代码.第一种方式就是创建一个Thread的子类并覆写run()方法.第

Java 并发/多线程教程(十一)-JAVA内存模型

本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!         Java内存模型指定Java虚拟机如何与计算机的内存(RAM)一起工作.Java虚拟机是整个计算机的一个模型,所以这个模型自然包含了一个内存模型--也就是Java内存模型.         如果您想要设计正确的并发程序,那么理解Java内存模型是非常重要的.Java内存模型指定了不同线程如何以及何时可以看到由其他线程写入共享变量的值,以及在必要时如何同步访问共享变量

Java 并发/多线程教程(八)-竞态条件和临界区

      本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!       竞态条件是在临界区内可能发生的一种特殊情况.临界区是多线程并发执行一代码,根据线程的执行顺序可能产生多种结果的区域.多线程在临界区执行代码的结果可能不一样,不同的结果取决于线程的执行顺序.也就是说,临界区包含竞态条件.竞态一词源于隐喻,线程在临界区进进行资源竞争,在临界区的资源竞争影响最后的结果.      这听起来有点复杂,在下面的篇幅中,将会在下面的篇幅

Java 并发/多线程教程(十二)-JAVA同步块

本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正! 一个Java同步块标记一个方法或一个代码块作为同步.可以使用Java同步块来避免竞态条件. java同步关键字       在Java中同步的块被标记为Synchronized关键字.Java中的同步块在某些对象上是同步的.在同一对象上同步的所有同步块只能在同一时间内执行一个线程.所有试图进入同步块的其他线程都被阻塞,直到同步块中的线程退出该块. Synchronized关键字可以

Java 并发/多线程教程(六)-并发VS并行

       本系列译自jakob jenkov的Java并发多线程教程,个人觉得很有收获.由于个人水平有限,不对之处还望矫正!         在多线程线程编程中,我们经常提及并发和并行,但是并发和并行究竟是什么意思,他们所要表达是同一回事,还是不是同一加事.        它们当然不是一回事,虽然表面上它们看起来非常的相似,但是它们是两个不相同的术语.在此之前,我也花费了大量的时间去了解并发与并行的区别,因此我觉得在这里对比一下两者. 并发         并发意味着一个应用在同一时刻处理多

Java 并发/多线程教程(四)-并发模型

       本系列译自jakob jenkov的Java并发多线程教程(本章节部分内容参考http://ifeve.com/并发编程模型),个人觉得很有收获.由于个人水平有限,不对之处还望矫正!        并发系统可以有多种并发模型来实现,并发模型指定线程如何协同完成分配给他们的任务.不同的并发模型以不同的方式划分任务,并且线程与线程之间以不同的方式进行通信和协作. 并发模型与分布式系统的相似性          本文中描述的并发模型类似于分布式系统中使用的不同体系结构.在并发系统中,不同