Java并发包之读写锁

读写锁出现的原因在于当我们使用重入锁时,对待读与写数据,我们总是加锁,使得有多少个线程访问这个临界区,就需要线程数*每个访问临界区的时间。但只读操作,我们却可以让多个线程同时访问临界区,这样时间就变为=访问临界区时间了,即由串行访问变为并行访问(临界区)。

举例如下:


Java并发包之读写锁_第1张图片
Java并发包之读写锁_第2张图片
Java并发包之读写锁_第3张图片
无读写锁

所耗时间为20秒:因为定义了20个线程,每个线程对临界区单独访问。

加入读写锁后:


Java并发包之读写锁_第4张图片

18个读线程可以同时访问临界区,所以为1秒,而写操作需要2s,共三秒即可结束。

说明:多线程的定义方法:

1. 定义相同的接口Runnable r=new Runnable(){run(){.....}};

定义多线程时 for+new Thread(r).start()即可。

2. 通过线程池定义指定个线程,submit方法统一分配。

你可能感兴趣的:(Java并发包之读写锁)