多线程知识(1)

来源:互联网 发布:北京汉朗网络信息科技 编辑:程序博客网 时间:2024/05/22 00:02

1、关于volatile

  当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存;当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。通过volatile可以解决内存可见性的问题。

2、关于锁

  锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁时,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须要从主内存中去读取共享变量。通过锁不仅仅可以保证代码执行的原子性,还可以解决内存可见性的问题。

0 0