java多线程编程——显示锁ReadWriteLock(二)
2014-10-30 11:33
363 查看
当需要对集合同时进行写入和读取操作时,如果多线程同时操作会出现异常,那么现在利用ReadWriteLock显示锁,可以在写入量比较小,读取量比较大的场景中,方便的实现上述功能。
线程main第一次获取写入锁
线程main第二次获取写入锁
线程main第一次获取读取锁
线程main第二次获取读取锁
线程main第三次获取读取锁
读取线程Thread-2在1302257210194开始执行
线程Thread-2在1302257210194读取数据,但是dataMap为空
线程Thread-2在1302257210194读取数据,key=100,value=null,dataMap大小为0
写入线程Thread-12在1302257210194开始执行
写入线程Thread-11在1302257210194开始执行
线程Thread-12在1302257210195写入数据,key=100,value=value100,dataMap大小为1
读取线程Thread-4在1302257210195开始执行
读取线程Thread-6在1302257210195开始执行
读取线程Thread-8在1302257210195开始执行
读取线程Thread-3在1302257210195开始执行
读取线程Thread-1在1302257210195开始执行
读取线程Thread-5在1302257210195开始执行
读取线程Thread-7在1302257210195开始执行
读取线程Thread-0在1302257210195开始执行
读取线程Thread-9在1302257210195开始执行
写入线程Thread-10在1302257210195开始执行
线程Thread-11在1302257210695写入数据,key=101,value=value101,dataMap大小为2
线程Thread-4在1302257211215读取数据,key=100,value=value100,dataMap大小为2
线程Thread-6在1302257211215读取数据,key=101,value=value101,dataMap大小为2
线程Thread-8在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-1在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-3在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-5在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-7在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-0在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-9在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-10在1302257211216写入数据,key=102,value=value102,dataMap大小为3
线程Thread-12在1302257211743写入数据,key=103,value=value103,dataMap大小为4
线程Thread-11在1302257212243写入数据,key=104,value=value104,dataMap大小为5
线程Thread-10在1302257212743写入数据,key=105,value=value105,dataMap大小为6
线程Thread-12在1302257213243写入数据,key=106,value=value106,dataMap大小为7
线程Thread-11在1302257213744写入数据,key=107,value=value107,dataMap大小为8
线程Thread-2在1302257214244读取数据,key=102,value=value102,dataMap大小为8
线程Thread-10在1302257214244写入数据,key=108,value=value108,dataMap大小为9
线程Thread-12在1302257214744写入数据,key=109,value=value109,dataMap大小为10
线程Thread-1在1302257215244读取数据,key=103,value=value103,dataMap大小为10
线程Thread-3在1302257215244读取数据,key=104,value=value104,dataMap大小为10
线程Thread-5在1302257215244读取数据,key=105,value=value105,dataMap大小为10
线程Thread-7在1302257215244读取数据,key=106,value=value106,dataMap大小为10
线程Thread-4在1302257215244读取数据,key=106,value=value106,dataMap大小为10
线程Thread-6在1302257215244读取数据,key=107,value=value107,dataMap大小为10
线程Thread-8在1302257215244读取数据,key=108,value=value108,dataMap大小为10
线程Thread-9在1302257215244读取数据,key=110,value=value109,dataMap大小为10
线程Thread-0在1302257215244读取数据,key=111,value=null,dataMap大小为10
线程Thread-11在1302257215245写入数据,key=110,value=value110,dataMap大小为11
线程Thread-10在1302257215745写入数据,key=111,value=value111,dataMap大小为12
线程Thread-12在1302257216245写入数据,key=112,value=value112,dataMap大小为13
线程Thread-11在1302257216745写入数据,key=113,value=value113,dataMap大小为14
线程Thread-10在1302257217245写入数据,key=114,value=value114,dataMap大小为15
线程Thread-12在1302257217745写入数据,key=115,value=value115,dataMap大小为16
线程Thread-2在1302257218245读取数据,key=111,value=value111,dataMap大小为16
线程Thread-11在1302257218245写入数据,key=116,value=value116,dataMap大小为17
线程Thread-10在1302257218745写入数据,key=117,value=value117,dataMap大小为18
线程Thread-4在1302257219245读取数据,key=112,value=value112,dataMap大小为18
线程Thread-8在1302257219245读取数据,key=112,value=value112,dataMap大小为18
线程Thread-6在1302257219245读取数据,key=113,value=value112,dataMap大小为18
线程Thread-1在1302257219245读取数据,key=115,value=value115,dataMap大小为18
线程Thread-3在1302257219245读取数据,key=115,value=value115,dataMap大小为18
线程Thread-5在1302257219245读取数据,key=117,value=value116,dataMap大小为18
线程Thread-7在1302257219245读取数据,key=117,value=value117,dataMap大小为18
线程Thread-9在1302257219245读取数据,key=119,value=null,dataMap大小为18
线程Thread-0在1302257219245读取数据,key=119,value=null,dataMap大小为18
线程Thread-12在1302257219246写入数据,key=118,value=value118,dataMap大小为19
线程Thread-11在1302257219746写入数据,key=119,value=value119,dataMap大小为20
线程Thread-10在1302257220246写入数据,key=120,value=value120,dataMap大小为21
线程Thread-12在1302257220746写入数据,key=121,value=value121,dataMap大小为22
线程Thread-11在1302257221246写入数据,key=122,value=value122,dataMap大小为23
线程Thread-10在1302257221746写入数据,key=123,value=value123,dataMap大小为24
线程Thread-2在1302257222246读取数据,key=119,value=value119,dataMap大小为24
线程Thread-12在1302257222246写入数据,key=124,value=value124,dataMap大小为25
线程Thread-11在1302257222746写入数据,key=125,value=value125,dataMap大小为26
线程Thread-3在1302257223247读取数据,key=120,value=value120,dataMap大小为26
线程Thread-7在1302257223247读取数据,key=121,value=value121,dataMap大小为26
线程Thread-1在1302257223247读取数据,key=122,value=value122,dataMap大小为26
线程Thread-5在1302257223247读取数据,key=123,value=value123,dataMap大小为26
线程Thread-9在1302257223247读取数据,key=124,value=value124,dataMap大小为26
线程Thread-4在1302257223247读取数据,key=124,value=value124,dataMap大小为26
线程Thread-8在1302257223247读取数据,key=126,value=value125,dataMap大小为26
线程Thread-6在1302257223247读取数据,key=127,value=null,dataMap大小为26
线程Thread-0在1302257223247读取数据,key=127,value=null,dataMap大小为26
线程Thread-10在1302257223248写入数据,key=126,value=value126,dataMap大小为27
线程Thread-12在1302257223748写入数据,key=127,value=value127,dataMap大小为28
线程Thread-11在1302257224288写入数据,key=128,value=value128,dataMap大小为29
线程Thread-10在1302257224788写入数据,key=129,value=value129,dataMap大小为30
线程Thread-2在1302257225288读取数据,key=127,value=value127,dataMap大小为30
线程Thread-3在1302257226247读取数据,key=128,value=value128,dataMap大小为30
线程Thread-7在1302257226247读取数据,key=129,value=value129,dataMap大小为30
线程Thread-1在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257226248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257228288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257229248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257229248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257231288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257234288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257237289读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257240307读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257241291读取数据,key=130,value=null,dataMap大小为30
package test; import java.util.Calendar; import java.util.Map; import java.util.TreeMap; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantReadWriteLock; /** * 可重入读写锁 * * @author Administrator * */ @SuppressWarnings("all") public class ReadWriteLockDemo { private ReentrantReadWriteLock lock = null; // 读锁 private Lock readLock = null; // 写锁 private Lock writeLock = null; public int key = 100; public int index = 100; // 线程共享数据 public Map<Integer, String> dataMap = null; public ReadWriteLockDemo() { // 创建公平的可重入读写锁 lock = new ReentrantReadWriteLock(true); readLock = lock.readLock(); writeLock = lock.writeLock(); dataMap = new TreeMap<Integer, String>(); } public static void main(String[] args) { ReadWriteLockDemo test = new ReadWriteLockDemo(); // 第一次获取写入锁 test.writeLock.lock(); System.out.println("线程" + Thread.currentThread().getName() + "第一次获取写入锁"); // 第二次获取写入锁(这就是可重入的含义) test.writeLock.lock(); System.out.println("线程" + Thread.currentThread().getName() + "第二次获取写入锁"); test.readLock.lock(); System.out.println("线程" + Thread.currentThread().getName() + "第一次获取读取锁"); test.readLock.lock(); System.out.println("线程" + Thread.currentThread().getName() + "第二次获取读取锁"); test.readLock.lock(); System.out.println("线程" + Thread.currentThread().getName() + "第三次获取读取锁"); test.writeLock.unlock(); test.writeLock.unlock(); test.readLock.unlock(); test.readLock.unlock(); test.readLock.unlock(); test.test(); } public void test() { for (int i = 0; i < 10; i++) { new Thread(new reader(this)).start(); } for (int i = 0; i < 3; i++) { new Thread(new writer(this)).start(); } } public void read() { readLock.lock(); try { if (dataMap.isEmpty()) { Calendar now = Calendar.getInstance(); System.out.println("线程" + Thread.currentThread().getName() + "在" + now.getTime().getTime() + "读取数据,但是dataMap为空"); } String value = dataMap.get(index); Calendar now = Calendar.getInstance(); System.out.println("线程" + Thread.currentThread().getName() + "在" + now.getTime().getTime() + "读取数据,key=" + index + ",value=" + value + ",dataMap大小为" + dataMap.size()); if (value != null) { index++; } } finally { readLock.unlock(); } try { Thread.sleep(3000); } catch (Exception e) { e.printStackTrace(); } } public void write() { writeLock.lock(); try { String value = "value" + key; dataMap.put(new Integer(key), value); Calendar now = Calendar.getInstance(); System.out.println("线程" + Thread.currentThread().getName() + "在" + now.getTime().getTime() + "写入数据,key=" + key + ",value=" + value + ",dataMap大小为" + dataMap.size()); key++; try { Thread.sleep(500); } catch (Exception e) { e.printStackTrace(); } } finally { writeLock.unlock(); } } class reader implements Runnable { private ReadWriteLockDemo test = null; public reader(ReadWriteLockDemo test) { this.test = test; } @Override public void run() { Calendar now = Calendar.getInstance(); System.out.println("读取线程" + Thread.currentThread().getName() + "在" + now.getTime().getTime() + "开始执行"); for (int i = 0; i < 10; i++) { test.read(); } } } class writer implements Runnable { private ReadWriteLockDemo test = null; public writer(ReadWriteLockDemo test) { this.test = test; } @Override public void run() { Calendar now = Calendar.getInstance(); System.out.println("写入线程" + Thread.currentThread().getName() + "在" + now.getTime().getTime() + "开始执行"); for (int i = 0; i < 10; i++) { test.write(); } } } }
线程main第一次获取写入锁
线程main第二次获取写入锁
线程main第一次获取读取锁
线程main第二次获取读取锁
线程main第三次获取读取锁
读取线程Thread-2在1302257210194开始执行
线程Thread-2在1302257210194读取数据,但是dataMap为空
线程Thread-2在1302257210194读取数据,key=100,value=null,dataMap大小为0
写入线程Thread-12在1302257210194开始执行
写入线程Thread-11在1302257210194开始执行
线程Thread-12在1302257210195写入数据,key=100,value=value100,dataMap大小为1
读取线程Thread-4在1302257210195开始执行
读取线程Thread-6在1302257210195开始执行
读取线程Thread-8在1302257210195开始执行
读取线程Thread-3在1302257210195开始执行
读取线程Thread-1在1302257210195开始执行
读取线程Thread-5在1302257210195开始执行
读取线程Thread-7在1302257210195开始执行
读取线程Thread-0在1302257210195开始执行
读取线程Thread-9在1302257210195开始执行
写入线程Thread-10在1302257210195开始执行
线程Thread-11在1302257210695写入数据,key=101,value=value101,dataMap大小为2
线程Thread-4在1302257211215读取数据,key=100,value=value100,dataMap大小为2
线程Thread-6在1302257211215读取数据,key=101,value=value101,dataMap大小为2
线程Thread-8在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-1在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-3在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-5在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-7在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-0在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-9在1302257211215读取数据,key=102,value=null,dataMap大小为2
线程Thread-10在1302257211216写入数据,key=102,value=value102,dataMap大小为3
线程Thread-12在1302257211743写入数据,key=103,value=value103,dataMap大小为4
线程Thread-11在1302257212243写入数据,key=104,value=value104,dataMap大小为5
线程Thread-10在1302257212743写入数据,key=105,value=value105,dataMap大小为6
线程Thread-12在1302257213243写入数据,key=106,value=value106,dataMap大小为7
线程Thread-11在1302257213744写入数据,key=107,value=value107,dataMap大小为8
线程Thread-2在1302257214244读取数据,key=102,value=value102,dataMap大小为8
线程Thread-10在1302257214244写入数据,key=108,value=value108,dataMap大小为9
线程Thread-12在1302257214744写入数据,key=109,value=value109,dataMap大小为10
线程Thread-1在1302257215244读取数据,key=103,value=value103,dataMap大小为10
线程Thread-3在1302257215244读取数据,key=104,value=value104,dataMap大小为10
线程Thread-5在1302257215244读取数据,key=105,value=value105,dataMap大小为10
线程Thread-7在1302257215244读取数据,key=106,value=value106,dataMap大小为10
线程Thread-4在1302257215244读取数据,key=106,value=value106,dataMap大小为10
线程Thread-6在1302257215244读取数据,key=107,value=value107,dataMap大小为10
线程Thread-8在1302257215244读取数据,key=108,value=value108,dataMap大小为10
线程Thread-9在1302257215244读取数据,key=110,value=value109,dataMap大小为10
线程Thread-0在1302257215244读取数据,key=111,value=null,dataMap大小为10
线程Thread-11在1302257215245写入数据,key=110,value=value110,dataMap大小为11
线程Thread-10在1302257215745写入数据,key=111,value=value111,dataMap大小为12
线程Thread-12在1302257216245写入数据,key=112,value=value112,dataMap大小为13
线程Thread-11在1302257216745写入数据,key=113,value=value113,dataMap大小为14
线程Thread-10在1302257217245写入数据,key=114,value=value114,dataMap大小为15
线程Thread-12在1302257217745写入数据,key=115,value=value115,dataMap大小为16
线程Thread-2在1302257218245读取数据,key=111,value=value111,dataMap大小为16
线程Thread-11在1302257218245写入数据,key=116,value=value116,dataMap大小为17
线程Thread-10在1302257218745写入数据,key=117,value=value117,dataMap大小为18
线程Thread-4在1302257219245读取数据,key=112,value=value112,dataMap大小为18
线程Thread-8在1302257219245读取数据,key=112,value=value112,dataMap大小为18
线程Thread-6在1302257219245读取数据,key=113,value=value112,dataMap大小为18
线程Thread-1在1302257219245读取数据,key=115,value=value115,dataMap大小为18
线程Thread-3在1302257219245读取数据,key=115,value=value115,dataMap大小为18
线程Thread-5在1302257219245读取数据,key=117,value=value116,dataMap大小为18
线程Thread-7在1302257219245读取数据,key=117,value=value117,dataMap大小为18
线程Thread-9在1302257219245读取数据,key=119,value=null,dataMap大小为18
线程Thread-0在1302257219245读取数据,key=119,value=null,dataMap大小为18
线程Thread-12在1302257219246写入数据,key=118,value=value118,dataMap大小为19
线程Thread-11在1302257219746写入数据,key=119,value=value119,dataMap大小为20
线程Thread-10在1302257220246写入数据,key=120,value=value120,dataMap大小为21
线程Thread-12在1302257220746写入数据,key=121,value=value121,dataMap大小为22
线程Thread-11在1302257221246写入数据,key=122,value=value122,dataMap大小为23
线程Thread-10在1302257221746写入数据,key=123,value=value123,dataMap大小为24
线程Thread-2在1302257222246读取数据,key=119,value=value119,dataMap大小为24
线程Thread-12在1302257222246写入数据,key=124,value=value124,dataMap大小为25
线程Thread-11在1302257222746写入数据,key=125,value=value125,dataMap大小为26
线程Thread-3在1302257223247读取数据,key=120,value=value120,dataMap大小为26
线程Thread-7在1302257223247读取数据,key=121,value=value121,dataMap大小为26
线程Thread-1在1302257223247读取数据,key=122,value=value122,dataMap大小为26
线程Thread-5在1302257223247读取数据,key=123,value=value123,dataMap大小为26
线程Thread-9在1302257223247读取数据,key=124,value=value124,dataMap大小为26
线程Thread-4在1302257223247读取数据,key=124,value=value124,dataMap大小为26
线程Thread-8在1302257223247读取数据,key=126,value=value125,dataMap大小为26
线程Thread-6在1302257223247读取数据,key=127,value=null,dataMap大小为26
线程Thread-0在1302257223247读取数据,key=127,value=null,dataMap大小为26
线程Thread-10在1302257223248写入数据,key=126,value=value126,dataMap大小为27
线程Thread-12在1302257223748写入数据,key=127,value=value127,dataMap大小为28
线程Thread-11在1302257224288写入数据,key=128,value=value128,dataMap大小为29
线程Thread-10在1302257224788写入数据,key=129,value=value129,dataMap大小为30
线程Thread-2在1302257225288读取数据,key=127,value=value127,dataMap大小为30
线程Thread-3在1302257226247读取数据,key=128,value=value128,dataMap大小为30
线程Thread-7在1302257226247读取数据,key=129,value=value129,dataMap大小为30
线程Thread-1在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257226247读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257226248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257228288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257229247读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257229248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257229248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257231288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257232247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257232248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257234288读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257235247读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257235248读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257237289读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257238261读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257238268读取数据,key=130,value=null,dataMap大小为30
线程Thread-2在1302257240307读取数据,key=130,value=null,dataMap大小为30
线程Thread-8在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-6在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-0在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-4在1302257241279读取数据,key=130,value=null,dataMap大小为30
线程Thread-3在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-7在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-1在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-5在1302257241291读取数据,key=130,value=null,dataMap大小为30
线程Thread-9在1302257241291读取数据,key=130,value=null,dataMap大小为30
相关文章推荐
- java多线程学习笔记——读写锁(ReentrantReadWriteLock)
- C# 多线程编程之锁的使用【互斥锁(lock)和读写锁(ReadWriteLock)】
- Java:多线程,线程同步,同步锁(Lock)的使用(ReentrantLock、ReentrantReadWriteLock)
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
- java多线程基础---synchronized与ReentrantReadWriteLock的介绍与比较
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- Java多线程——锁(Synchronized、Lock、ReentrantLock、ReadWriteLock、ReentrantReadWriteLock)
- Java多线程 ReentrantReadWriteLock深入分析
- java多线程:并发包中ReentrantReadWriteLock读写锁的原理
- JAVA多线程学习之ReentrantReadWriteLock
- java多线程基础---synchronized与ReentrantReadWriteLock的介绍和比较
- java多线程编程——显示锁ReentrantLock(一)
- Java基础:多线程之ReadWriteLock、Condition、Semaphore
- 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock
- Java多线程之~~~ReadWriteLock 读写分离的多线程实现
- Java多线程(十)之ReentrantReadWriteLock深入分析
- 【Java并发编程实战】—–“J.U.C”:ReentrantReadWriteLock
- java 多线程 ReentrantReadWriteLock 使用
- java多线程--ReentrantReadWriteLock的使用
- Java并发编程之ReadWriteLock,读取大数据的利器