ReentrantReadWriteLock与ReentrantLock的区别:
ReentrantLock:同一时间只能有一个线程执行ReentrantLock.lock()后面的代码,这样虽然可以保证线程安全,但程序的运行效率却比较低。
ReentrantReadWriteLock:有两种锁也就是分别有读和写两种锁,在不需要操作实例变量时,可用读锁,在操作实例变量时,用写锁,这样就可以提升程序的运行效率。
共享锁:读相关的锁就叫共享锁。
排他锁:写相关的锁就叫排他锁。
我们首先看一下共享锁:




我们看两个线程是异步执行的,这就是共享锁的好处,多个线程可以同时执行lock()方法后面的代码,提高程序的执行效率。下面我们看一下排他锁:




我们看输出是同步执行的。这也是排他锁的特性,如果线程中有操作实例变量的操作,为了保证线程安全可以用排他锁。
共享锁和排他锁也是互斥锁。这句话的意思是说如果线程已经获取到了共享锁,但程序没有执行完,那么此时,其它线程在获取排他锁时,是获取不到的,只能等待共享锁释放后才可获取到。




