前言:在工作中我们基本上是基于业务进行开发,技术只是作为一种工具;甚至已经不在乎使用什么工具,能够实现功能就行。这样就会导致我们的技术越来越差,看似好几年工作经验;实则确实一年经验干了好几年,并没有太大的提升。于是便有了本文;本文主要讲述Java锁相关的知识,但并不是为了去应付面试官,而是深入学习,做到知其然且知其所以然。开始!!!
学习类容
- synchronized关键字
- 偏向锁、轻量级锁、重量级锁
- 对象头、Monitor、锁消除
- ReentrantLock
- Condition接口
- 公平锁、可重入、尝试获取锁
- Semaphore
- ReadWriteLock
- StampedLock
- LockSupport
情景导入
生活中,我们经常自驾旅游,但是到达景区后停车却很麻烦,于是小明就觉得编写一个程序,来模拟停车场车流情况!
需求:现有一停车场,该停车场有5个车位,每间隔2秒就有一辆车抵达停车场门口。当停车场车位被停满后,后面到达的车辆就不能再进入停车场,只能在外面等待有车辆出来后才能进去。每位车主最多只能等待5秒,超过时间后,就不再等待直接离开该停车场。假设辆车进入停车场后,停车时间随机,但是至少需要10秒,最多不超过30秒。
要求:请尽可能的避免有车辆等待超时直接离开停车场,并且保证先到达停车场的车辆先停车。为了便于观察打印结果,上述车位数量、间隔时间、最大等待时长、停车时间均可自定义。