Java并发包之读写锁
2017-10-28 本文已影响0人
xinxinlimin
读写锁出现的原因在于当我们使用重入锁时,对待读与写数据,我们总是加锁,使得有多少个线程访问这个临界区,就需要线程数*每个访问临界区的时间。但只读操作,我们却可以让多个线程同时访问临界区,这样时间就变为=访问临界区时间了,即由串行访问变为并行访问(临界区)。
举例如下:



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

18个读线程可以同时访问临界区,所以为1秒,而写操作需要2s,共三秒即可结束。
说明:多线程的定义方法:
1. 定义相同的接口Runnable r=new Runnable(){run(){.....}};
定义多线程时 for+new Thread(r).start()即可。
2. 通过线程池定义指定个线程,submit方法统一分配。