对象锁与等待队列

当多个线程访问同一个数据块的时候,为了避免线程安全问题,通常会给数据块加锁。这个锁到底该怎么去设计呢?

在Java里面,一切皆是对象,那么锁肯定也得是对象,所以人们给锁起了一个更形象的名字:对象锁。对象锁并不是一类特殊的对象,因为一切对象都可以当做锁。

锁的目的是什么呢?让自己可以访问数据,而把别人锁在门外。门外到底锁了谁呢?这个也应该很清楚。这个时候,就该等待队列出场了。也就是说,对象锁和等待队列是同时存在的,一个对象被当做锁之后,必定有一个等待队列供其使用。

关于对象锁的底层实现是怎么回事,还有等待队列中的线程如何被调度(后续文章会有介绍),这些问题都可以去挖掘,但是值不值得去做,要根据个人的情况而定。本文并不想深究更多的底层原理,因本人并非JVM的专业人士,而且也不建议大多数做此方面的深究。