它所修饰的变量不保留拷贝,直接访问主内存中的
这样可以形成简单的同步,是吗??

解决方案 »

  1.   

    volatile只是让数据可以即时得更新,保证数据的可见性,并不能实现操作的同步或者互斥一般用来修饰简单的标识
    比如根据标识boolean flg决定是等待还是继续
    while(flg){
    wait()
    }如果用synchoronized实现的话,写的时候要加锁解锁,读的时候还要加锁解锁……
      

  2.   

    volatile是变量修饰符,而synchronized则作用于一段代码
      

  3.   

    这两个关键字在 API 上是找不到的吧?
      

  4.   

    两者的意义是不一样的,volatile 修饰变量,读取的时候,强制重读,而synchronized,用于操作:将对临界资源的管控限制在一个原子操作之内。
      

  5.   

    接上:这里的临界资源有可能是多个,而不是一个,由多个临界资源构成一个大的临界资源。举个例子,A需同时需要要 0 和 1这个两个临界资源,B也同时需要0和1这两个,那么当A得到0, B得到1怎么办?会死锁。这种情况下就要保证0和1问题为一个大的资源来管控。此时用volatile是无法做到的。
      

  6.   

    volatile经常与transient变量搞混了。