008 synchronized关键词

一 .概述

  在前面,我们说到了java提供了synchronized关键词帮助我们实现一个可重入的独占锁的概念.

  本节,我们讨论这个关键词的使用.


 二 .使用方式

synchronized关键词可以出现在三个地方

[1]静态方法上

[2]实例方法上

[3]同步代码块上

从本质上说,我们其实没有必要分得那么的细,因为原理都是一致的.

该关键词的作用就是提供了一个阻塞队列的概念:

一个线程获取的monitor,就会获得可以资源的独享权利,当其它线程试图获取该monitor的时候,就会进入到该monitor的阻塞队列之中,直到拥有该monitor的线程释放所有权.


 三 . synchronized关键词的核心 --- monitor

  在java之中,所有的对象都可以作为monitor,也就是说,在java之中实现一个独占的概念非常的容易.

从上面的分析,我们可以知道,monitor就是一个锁的概念,只是这个锁是重量级的锁.

  一旦一个线程获取,如果不释放,其它的线程就会被阻塞,直到monitor被释放.

  正是这个原因,synchronized关键词的性能可能不是很好.


 四 .改进

  在java6之后,synchronized关键词进行了改进,出现了自旋锁和轻量级锁的概念,其核心就是synchronized关键词实现的锁的力度会有一个升级的概念.

  在这里我们不去说这些细枝末节的概念.


五 .死锁等问题

  如果多个线程由于同步方法使用不当,就可能出现死锁的概念.这是线程们都无法继续执行的一个状态.

  如果出现了死锁的现象,我们可以使用jconsole来查看和解决死锁的问题.