下列关于Java并发的说法中正确的是
CopyOnWriteArrayList适用于写多读少的并发场景
ReadWriteLock适用于读多写少的并发场景
ConcurrentHashMap的写操作不需要加锁,读操作需要加锁
只要在定义int类型的成员变量i的时候加上volatile关键字,那么多线程并发执行i++这样的操作的时候就是线程安全的了
CopyOnWrite机制又称为写时复制,在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此如果每次读取都进行加锁操作,其实是一种资源浪费。我们应该允许多个线程同时访问 List 的内部数据,毕竟读操作是线程安全的。
ReadWriteLock,分为读锁(Read Lock)和写锁(Write Lock)。读锁是共享的,多个线程可以同时持有读锁,这就像是多人同时看同一本书。而写锁则是独占的,一旦一个线程获取了写锁,其他线程就只能乖乖等它写完,就像只有一个人能写日记,其他人等着。适用于读多写少的并发场景
ConcurrentHashMap单一操作是线程安全的,但组合操作,例如containsKey判断和put赋值在一起就不是原子操作了,因此在多线程场景下这样的操作是需要加锁的。
volatile只是保证单一操作的原子性,i++属于两个操作,不安全。
ReadWriteLock,分为读锁(Read Lock)和写锁(Write Lock)。读锁是共享的,多个线程可以同时持有读锁,这就像是多人同时看同一本书。而写锁则是独占的,一旦一个线程获取了写锁,其他线程就只能乖乖等它写完,就像只有一个人能写日记,其他人等着。适用于读多写少的并发场景
ConcurrentHashMap单一操作是线程安全的,但组合操作,例如containsKey判断和put赋值在一起就不是原子操作了,因此在多线程场景下这样的操作是需要加锁的。
volatile只是保证单一操作的原子性,i++属于两个操作,不安全。