对象的方法中一旦加入synchronized修饰,则任什么时候刻只能有一个线程访问synchronized修饰的方法。假设有个数据对象拥有写方法与读方法,多线程环境中要想保证数据的安全,需对该对象的读写方法都要加入 synchronized同步块。这样任何线程在写入时,其它线程没法读取与改变数据;若是有线程在读取时,其余线程也没法读取或写入。这种方式在写入操做远大于读操做时,问题不大,而当读取远远大于写入时,会形成性能瓶颈,由于此种状况下读取操做是能够同时进行的,而加锁操做限制了数据的并发读取。安全
在多线程开发中,常常会出现一种状况,咱们但愿读写分离。就是对于读取这个动做来讲,能够同时有多个线程同时去读取这个资源,可是对于写这个动做来讲,只能同时有一个线程来操做,并且同时,当有一个写线程在操做这个资源的时候,其余的读线程是不能来操做这个资源的,这样就极大的发挥了多线程的特色,能很好的将多线程的能力发挥出来。多线程
ReadWriteLock解决了:当写操做时,其余线程没法读取或写入数据,而当读操做时,其它线程没法写入数据,但却能够读取数据并发