Lock和Synchronized的不同

  在 Java 中线程的状态可以分为:新建(New),运行状态(Runnable)、阻塞状态(Blocked)、等待状态(Waiting)、结束状态(Terminated)。运行状态可以转为 阻塞状态或等待状态。
在接收完基本概念后,我们看看显示锁(Lock)和内部锁(synchronized)有什么不同。
  • Lock 支持更细粒度的同步控制
  • Lock是无阻塞锁,synchronized 是阻塞锁。当线程A持有锁S,如果线程B也期望获取锁S,如果是显示锁则线程B进入等待状态,如果是内部锁则线程B进入阻塞状态
  • Lock可以实现公平锁,synchronized 只能是非公平锁 公平是指JVM优先选择等待时间最长的线程持有锁,非公平是指随机选择
  • Lock 是代码级的,synchronized 是JVM级的


java 的内存模型,在java 中每个线程都有自己的工作内存,如寄存器,高速缓存等,线程在写入的时候首先写入的是自己的工作内存中,然后在刷到主内存中,读取也是先从主内存加载到工作内存中,然后线程是从工作内存中获取。
    volatile 只能保证每次读写数据的时候都是对主内存进行操作,但是并不能保证该资源的同步。

猜你喜欢

转载自xiaobingandxiaoer.iteye.com/blog/2147604