/*
* synchronized:有2种用法
* 1. synchronized 直接修饰方法
* 2. synchronized 块
* synchronized 里面牵扯到锁,
* 类似酒店的房间(共享的资源),多个人(多个线程)办理入住,若住客A(线程A)办理了01房间,
* 这时会对01房间加把锁,除了住客A外,其他的住客(线程B、线程C...)都不能访问01房间;
* 只有等住客A退房了(解除了对资源的锁),其他住客才能办理入住01房间
*
* 个人理解,锁就是:针对共享资源的一个访问权限,保证了数据的正确性
* 线程A锁住了某个共享资源,则:只有线程A解除锁后,其他线程才可以访问该资源;否则:其他线程就阻塞等待
* 而,锁的目的是:为了保证数据的正确性
*
* synchronized方法或synchronized语句块,意味着:
* 线程A执行此方法时,将执行此方法的其他线程都进入:阻塞状态,直至:线程A执行完毕,释放锁
*
* 至于,多线程下的单例模式,里面用到了:double-check(双重检测)
* 是在保证数据正确的前提下,为了:提高程序的性能
*
*/