synchronized 详解

作者: 奔跑的蛙牛 | 来源:发表于2018-08-02 23:55 被阅读0次

问题

那到底使用synchronized关键字是不是就是一个监视器? 不懂,理解的话可以向我发邮件gaomengjie_1@163.com,我虚心求教

前言

之前介绍如何使用Lock和Condation 详情请查看传送门
介绍一下锁和条件的关键之处

  • 锁用来保护代码片段,任何时间只有一个线程执行被保护的代码
  • 锁可以管理试图进入被保护代码段的线程
  • 锁可以拥有一个或多个相关对象
  • 每个条件对象管理已经进入代码保护片段,但不能运行的线程

synchronized(内嵌到Java语言内部的简单锁)

  public synchronized void method(){
      ......
  }

// 等价于

public void method(){
  this.initLock.lock();
  try{
    // method 
  }finaly{
    this.initLock.unlock();
  }
}

synchronized 方法中使用wait方法是添加一个线程到等待集中,notifyAll /notify 方法解除等待线程的阻塞状态
将静态方法声明为synchronized也是合法的,这样会获得相关类对象的内部锁。如果Bank类有一个静态的同步方法,当该方法被调用时,Bank.class对象会被锁住,没有任何其他的线程可以调用同一个类的静态方法

内部锁和条件的一些局限性

  • 不能中断一个试图获得锁的线程
  • 试图获得锁时不能设置为超时
  • 每个锁仅有一个单一的条件可能是不够的
  • 最好既不使用 Lock/Condition 也不使用 synchronized 关键字
  • 如果 synchronized 关键字适合你的程序, 那么请尽量使用它, 这样可以减少编写的代 码数量, 减少出错的几率。
  • 如果特别需要 Lock/Condition 结构提供的独有特性时, 才使用 Lock/Condition。


    synchronized关键字加锁

同步阻塞

每个对象含有锁,线程可以通过调用同步方法获得锁。还有 另一种机制可以获得锁, 通过进入一个同步阻塞。
也就是如下形式的阻塞:

  // 获得object的锁 
  synchronized (obj) // this is the syntax for a synchronized block
  {
      // do some work
  } 

我们也可以在转账操作中这样使用

public class Bank{
  private Object lock = new Object();
  public void transfer(int from ,int to ,int amount){
      synchronized (lock) // an ad-hoc lock
      {
          accounts[from] -= amount; 
          accounts[to] += amount;
      }
  }
}

监视器

监视器可以在不需要加锁的情况下保持线程的安全性

  • 监视器是只包含私有域的类
  • 每个监视器对象有一个私有的锁
  • 使用该锁对所有的方法都进行加锁
  • 该锁可以有任意多个相关条件

Volatile 域

volatile 关键字为实例域的同步访问提供了一种免锁机制。通知编译器和处理器此处可能并发更新,但Volatile操作并不是原子性的。保证安全读取

final变量 也可以安全的访问一个共享域

今天就到这吧,看不下去了这一章节!!

相关文章

  • 多线程使用之-----synchronized/wait/not

    参考文献: java synchronized详解 synchronized 修饰方法 synchronized ...

  • Java基础-Synchronized详解一

    Java中的Synchronized详解 1.Synchronized简介 Synchronized简称同步锁。 ...

  • java基础----Synchronized、Lock的区别与V

    引用了 Lock与synchronized 的区别 详解synchronized与Lock的区别与使用 Java并...

  • Synchronized 原理详解

    title: synchronized原理详解date: 2019-11-27author:...

  • Day26 Synchronized

    synchronized原理详解synchronized内置锁是一种对象锁(锁的是对象而非引用),作用粒度是对象,...

  • Synchronized 详解

    转载https://www.jianshu.com/p/29854dc7bd86面试题:主线程执行10次,子线程接...

  • synchronized 详解

    问题 那到底使用synchronized关键字是不是就是一个监视器? 不懂,理解的话可以向我发邮件gaomengj...

  • synchronized详解

    第一种,锁在方法上,这种很好理解 第二种,锁变量 关于这个锁我一开始理解的是在执行完synchronized代码块...

  • Synchronized 详解

    synchronized关键字采用对代码块/方法体加锁的方式解决Java中多线程访问同一个资源时,引起的资源冲突问...

  • Synchronized详解

    什么是Synchronized,有什么用? Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保...

网友评论

    本文标题:synchronized 详解

    本文链接:https://www.haomeiwen.com/subject/ncrevftx.html