精华内容
下载资源
问答
  • 问题背景:多个线程对一个共享的资源进行...用java.util.concurrent.locks中ReadWriteLock 可以轻松解决读写锁问题。我在思考如果没有ReadWriteLock,单靠synchronized可以怎样做呢? 的确,比较麻烦。1.结合张sir传...

    问题背景:多个线程对一个共享的资源进行读写访问。写线程之间需要互斥,读线程跟写线程需要互斥,读线程之间不用互斥。

    早些时候听张sir的课,讲述java5中增强并发的功能。用java.util.concurrent.locks中ReadWriteLock 可以轻松解决读写锁问题。我在思考如果没有ReadWriteLock,单靠synchronized可以怎样做呢? 的确,比较麻烦。

    1.结合张sir传授的面向对象的设计思想,首先设计一个业务类Business作为共享资源,封装write跟read方法。

    2.因为write必定互斥,所以直接定义synchronized。

    3.read之间不要互斥 所以read 不能直接定义synchronized的 但是 write跟read 需要互斥 如何控制 我想到的一个方法是在read里 加入synchronized(this){} 同时定义readThreads计数器作为信号量 我试想下会出现下面几种情况:

    read[m]表示某个线程的read方法 。

    write[n] 同上

    1>read[m]中执行到synchronized(this){readThreads++;}时 write[n]来了 write[n] 会被自身的synchronized阻塞。

    2>read[m]在do something(此时无锁)时 write[n] 来了 因为 readThreads!=0 而被迫wait。

    3> 每次read[m]结束时 wait中的write[n]会被notify 但如果发现还有其他的read的话 write[n] 只能无奈地再次wait。

    4>当readThreads==0并且调用notifyAll 时 read[m] 和 write[n] 会竞争cpu 如果write[n]再次落败,则会出现1>或3> ; 如果成了,则如下:

    5> 如果write[n] wait中醒来占锁,read[m]被阻塞synchronized(this){readThreads++;}之上。

    6>如果被阻塞的write[n]占锁,read[m]被阻塞synchronized(this){readThreads++;}之上。

    从以上看来read 和 write 是互斥的。

    4.实现细节如下:

    packagecommunication;

    importjava.util.Random;

    publicclassReadWriteLockTest {

    publicstaticvoidmain(String[] args){

    finalBusiness business =newBusiness();

    //启动4线程 2读 2写

    for(inti=1;i<=2;i++){

    newThread(newRunnable(){

    publicvoidrun() {

    for(intj=1;j<1000;j++){

    business.read();

    try{

    Thread.sleep(900);

    }catch(InterruptedException e) {

    e.printStackTrace();

    }

    }

    }

    }).start();

    newThread(newRunnable(){

    publicvoidrun() {

    Random r =newRandom();

    for(intj=1;j<1000;j++){

    inti = r.nextInt(100);

    business.write(i);

    try{

    Thread.sleep(1000);

    }catch(InterruptedException e) {

    e.printStackTrace();

    }

    }

    }

    }).start();

    }

    }

    }

    //封装的业务类

    classBusiness{

    privateintdata=0;//共享资源属性

    privateintreadThreads =0;//读线程数

    //private boolean isWriting  = false;

    //是否执行写 后来发现不需要 当write抢占锁时 所有的read 都被挡在synchronized (this){}之上 无机会执行wait

    publicvoidread(){

    synchronized(this) {

    /*while(isWriting){

    try {

    this.wait();

    } catch (InterruptedException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }*/

    //readThreads不被锁的话 会出现read和write不互斥的小概率事件 导致线程不安全

    readThreads++;

    }

    System.out.println(Thread.currentThread().getName()+" read begin");

    System.out.println(Thread.currentThread().getName()+" read:"+data);

    System.out.println(Thread.currentThread().getName()+" read finish");

    synchronized(this) {

    readThreads--;

    this.notifyAll();

    }

    }

    publicsynchronizedvoidwrite(inti){

    while(readThreads !=0){//当read 正处于do something状态时 来个write 那就只有等等先了

    try{

    this.wait();

    }catch(InterruptedException e) {

    e.printStackTrace();

    }

    }

    //isWriting = true;

    System.out.println(Thread.currentThread().getName()+" write start");

    data = i;

    System.out.println(Thread.currentThread().getName()+" write:"+i);

    System.out.println(Thread.currentThread().getName()+" write over");

    //isWriting = false;

    this.notifyAll();

    }

    }

    思考中:

    5.当读频繁时 readThreads会长时间!= 0 写线程会饿死 这个可以如何解决?

    展开全文
  • java动手实现读写锁

    千次阅读 2018-09-07 10:06:18
    基于synchronized实现读写锁 昨天面试小米基础平台,面试官问了一个这样的题目,让我自己实现一个读写锁,用lock实现。想了半天lock不会,最后改用synchronized实现  读写锁类的实现 两个变量read、write记录...

    基于synchronized实现读写锁

    昨天面试小米基础平台,面试官问了一个这样的题目,让我自己实现一个读写锁,用lock实现。想了半天lock不会,最后改用synchronized实现

    •  读写锁类的实现
    • 两个变量read、write记录读锁和写锁的个数
    • synchronized锁会锁住一个实例,同时只能等待一个方法执行完才能执行下一个方法操作。
    class MyReadWriteLock{
    	private volatile int read;
    	private volatile int write;
    	public MyReadWriteLock(){
    		this.read = 0;
    		this.write = 0;
    	}
    	public synchronized void readLock() throws InterruptedException{
    		if(write>0){
    			wait();
    		}
    		read++;
    	}
    	
    	public synchronized void readUnLock(){
    		read--;
    		notifyAll();
    	}
    	
    	public synchronized void writeLock() throws InterruptedException{
    		if(read>0||write>0){
    			wait();
    		}
    		write++;
    	}
    	
    	public synchronized void writeUnLock(){
    		write--;
    		notifyAll();
    	}
    }

     

    展开全文
  • /*Have a wait block*/#define SRWLOCK_WAIT 1/*Users are readers*/#define SRWLOCK_SHARED 2/*Bit-lock for editing the wait block*/#define SRWLOCK_LOCK ...

    /*Have a wait block*/

    #define SRWLOCK_WAIT 1

    /*Users are readers*/

    #define SRWLOCK_SHARED 2

    /*Bit-lock for editing the wait block*/

    #define SRWLOCK_LOCK 4

    #define SRWLOCK_LOCK_BIT 2

    /*Mask for the above bits*/

    #define SRWLOCK_MASK 7

    /*Number of current users * 8*/

    #define SRWLOCK_USERS 8

    typedef struct srwlock srwlock;

    struct srwlock

    {

    uintptr_t p;

    };

    typedef struct srw_sw srw_sw;

    struct srw_sw

    {

    uintptr_t spin;

    srw_sw *next;

    };

    typedef struct srw_wb srw_wb;

    struct srw_wb

    {

    /*s_count is the number of shared acquirers * SRWLOCK_USERS.*/

    uintptr_t s_count;

    /*Last points to the last wait block in the chain. The value

    is only valid when read from the first wait block.*/

    srw_wb *last;

    /*Next points to the next wait block in the chain.*/

    srw_wb *next;

    /*The wake chain is only valid for shared wait blocks*/

    srw_sw *wake;

    srw_sw *last_shared;

    int ex;

    };

    /*Wait for control of wait block*/

    static srw_wb *lock_wb(srwlock *l)

    {

    uintptr_t p;

    /*Spin on the wait block bit lock*/

    while (atomic_bitsetandtest(&l->p, SRWLOCK_LOCK_BIT)) cpu_relax();

    p = l->p;

    barrier();

    if (!(p & SRWLOCK_WAIT))

    {

    /*Oops, looks like the wait block was removed.*/

    atomic_clear_bit(&l->p, SRWLOCK_LOCK_BIT);

    return NULL;

    }

    return (srw_wb *)(p & ~SRWLOCK_MASK);

    }

    static void srwlock_init(srwlock *l)

    {

    l->p = 0;

    }

    static void srwlock_rdlock(srwlock *l)

    {

    srw_wb swblock;

    srw_sw sw;

    uintptr_t p;

    srw_wb *wb, *shared;

    while (1)

    {

    barrier();

    p = l->p;

    cpu_relax();

    if (!p)

    {

    /*This is a fast path, we can simply try to set the shared count to 1*/

    if (!cmpxchg(&l->p, 0, SRWLOCK_USERS | SRWLOCK_SHARED)) return;

    continue;

    }

    /*Don't interfere with locking*/

    if (p & SRWLOCK_LOCK) continue;

    if (p & SRWLOCK_SHARED)

    {

    if (!(p & SRWLOCK_WAIT))

    {

    /*This is a fast path, just increment the number of current shared locks*/

    if (cmpxchg(&l->p, p, p + SRWLOCK_USERS) == p) return;

    }

    else

    {

    /*There's other waiters already, lock the wait blocks and increment the shared count*/

    wb = lock_wb(l);

    if (wb) break;

    }

    continue;

    }

    /*Initialize wait block*/

    swblock.ex = FALSE;

    swblock.next = NULL;

    swblock.last = &swblock;

    swblock.wake = &sw;

    sw.next = NULL;

    sw.spin = 0;

    if (!(p & SRWLOCK_WAIT))

    {

    /** We need to setup the first wait block.

    * Currently an exclusive lock is held, change the lock to contended mode.*/

    swblock.s_count = SRWLOCK_USERS;

    swblock.last_shared = &sw;

    if (cmpxchg(&l->p, p, (uintptr_t)&swblock | SRWLOCK_WAIT) == p)

    {

    while (!sw.spin) cpu_relax();

    return;

    }

    continue;

    }

    /*Handle the contended but not shared case*/

    /** There's other waiters already, lock the wait blocks and increment the shared count.

    * If the last block in the chain is an exclusive lock, add another block.*/

    swblock.s_count = 0;

    wb = lock_wb(l);

    if (!wb) continue;

    shared = wb->last;

    if (shared->ex)

    {

    shared->next = &swblock;

    wb->last = &swblock;

    shared = &swblock;

    }

    else

    {

    shared->last_shared->next = &sw;

    }

    shared->s_count += SRWLOCK_USERS;

    shared->last_shared = &sw;

    /*Unlock*/

    barrier();

    l->p &= ~SRWLOCK_LOCK;

    /*Wait to be woken*/

    while (!sw.spin) cpu_relax();

    return;

    }

    /*The contended and shared case*/

    sw.next = NULL;

    sw.spin = 0;

    if (wb->ex)

    {

    /** We need to setup a new wait block.

    * Although we're currently in a shared lock and we're acquiring

    * a shared lock, there are exclusive locks queued in between.

    * We need to wait until those are released.*/

    shared = wb->last;

    if (shared->ex)

    {

    swblock.ex = FALSE;

    swblock.s_count = SRWLOCK_USERS;

    swblock.next = NULL;

    swblock.last = &swblock;

    swblock.wake = &sw;

    swblock.last_shared = &sw;

    shared->next = &swblock;

    wb->last = &swblock;

    }

    else

    {

    shared->last_shared->next = &sw;

    shared->s_count += SRWLOCK_USERS;

    shared->last_shared = &sw;

    }

    }

    else

    {

    wb->last_shared->next = &sw;

    wb->s_count += SRWLOCK_USERS;

    wb->last_shared = &sw;

    }

    /*Unlock*/

    barrier();

    l->p &= ~SRWLOCK_LOCK;

    /*Wait to be woken*/

    while (!sw.spin) cpu_relax();

    }

    static void srwlock_rdunlock(srwlock *l)

    {

    uintptr_t p, np;

    srw_wb *wb;

    srw_wb *next;

    while (1)

    {

    barrier();

    p = l->p;

    cpu_relax();

    if (p & SRWLOCK_WAIT)

    {

    /** There's a wait block, we need to wake a pending exclusive acquirer,

    * if this is the last shared release.*/

    wb = lock_wb(l);

    if (wb) break;

    continue;

    }

    /*Don't interfere with locking*/

    if (p & SRWLOCK_LOCK) continue;

    /** This is a fast path, we can simply decrement the shared

    * count and store the pointer*/

    np = p - SRWLOCK_USERS;

    /*If we are the last reader, then the lock is unused*/

    if (np == SRWLOCK_SHARED) np = 0;

    /*Try to release the lock*/

    if (cmpxchg(&l->p, p, np) == p) return;

    }

    wb->s_count -= SRWLOCK_USERS;

    if (wb->s_count)

    {

    /*Unlock*/

    barrier();

    l->p &= ~SRWLOCK_LOCK;

    return;

    }

    next = wb->next;

    if (next)

    {

    /** There's more blocks chained, we need to update the pointers

    * in the next wait block and update the wait block pointer.*/

    np = (uintptr_t)next | SRWLOCK_WAIT;

    next->last = wb->last;

    }

    else

    {

    /*Convert the lock to a simple exclusive lock.*/

    np = SRWLOCK_USERS;

    }

    barrier();

    /*This also unlocks wb lock bit*/

    l->p = np;

    barrier();

    wb->wake = (void *) 1;

    barrier();

    /*We released the lock*/

    }

    static int srwlock_rdtrylock(srwlock *s)

    {

    uintptr_t p = s->p;

    barrier();

    /*This is a fast path, we can simply try to set the shared count to 1*/

    if (!p && (cmpxchg(&s->p, 0, SRWLOCK_USERS | SRWLOCK_SHARED) == 0)) return 0;

    if ((p & (SRWLOCK_SHARED | SRWLOCK_WAIT)) == SRWLOCK_SHARED)

    {

    /*This is a fast path, just increment the number of current shared locks*/

    if (cmpxchg(&s->p, p, p + SRWLOCK_USERS) == p) return 0;

    }

    return EBUSY;

    }

    static void srwlock_wrlock(srwlock *l)

    {

    srw_wb swblock;

    uintptr_t p, np;

    /*Fastpath - no other readers or writers*/

    if (!l->p && (!cmpxchg(&l->p, 0, SRWLOCK_USERS))) return;

    /*Initialize wait block*/

    swblock.ex = TRUE;

    swblock.next = NULL;

    swblock.last = &swblock;

    swblock.wake = NULL;

    while (1)

    {

    barrier();

    p = l->p;

    cpu_relax();

    if (p & SRWLOCK_WAIT)

    {

    srw_wb *wb = lock_wb(l);

    if (!wb) continue;

    /*Complete Initialization of block*/

    swblock.s_count = 0;

    wb->last->next = &swblock;

    wb->last = &swblock;

    /*Unlock*/

    barrier();

    l->p &= ~SRWLOCK_LOCK;

    /*Has our wait block became the first one in the chain?*/

    while (!swblock.wake) cpu_relax();

    return;

    }

    /*Fastpath - no other readers or writers*/

    if (!p)

    {

    if (!cmpxchg(&l->p, 0, SRWLOCK_USERS)) return;

    continue;

    }

    /*Don't interfere with locking*/

    if (p & SRWLOCK_LOCK) continue;

    /*There are no wait blocks so far, we need to add ourselves as the first wait block.*/

    if (p & SRWLOCK_SHARED)

    {

    swblock.s_count = p & ~SRWLOCK_MASK;

    np = (uintptr_t)&swblock | SRWLOCK_SHARED | SRWLOCK_WAIT;

    }

    else

    {

    swblock.s_count = 0;

    np = (uintptr_t)&swblock | SRWLOCK_WAIT;

    }

    /*Try to make change*/

    if (cmpxchg(&l->p, p, np) == p) break;

    }

    /*Has our wait block became the first one in the chain?*/

    while (!swblock.wake) cpu_relax();

    }

    static void srwlock_wrunlock(srwlock *l)

    {

    uintptr_t p, np;

    srw_wb *wb;

    srw_wb *next;

    srw_sw *wake, *wake_next;

    while (1)

    {

    barrier();

    p = l->p;

    cpu_relax();

    if (p == SRWLOCK_USERS)

    {

    /** This is the fast path, we can simply clear the SRWLOCK_USERS bit.

    * All other bits should be 0 now because this is a simple exclusive lock,

    * and no one else is waiting.*/

    if (cmpxchg(&l->p, SRWLOCK_USERS, 0) == SRWLOCK_USERS) return;

    continue;

    }

    /*There's a wait block, we need to wake the next pending acquirer*/

    wb = lock_wb(l);

    if (wb) break;

    }

    next = wb->next;

    if (next)

    {

    /** There's more blocks chained, we need to update the pointers

    * in the next wait block and update the wait block pointer.*/

    np = (uintptr_t)next | SRWLOCK_WAIT;

    if (!wb->ex)

    {

    /*Save the shared count*/

    next->s_count = wb->s_count;

    np |= SRWLOCK_SHARED;

    }

    next->last = wb->last;

    }

    else

    {

    /*Convert the lock to a simple lock.*/

    if (wb->ex)

    {

    np = SRWLOCK_USERS;

    }

    else

    {

    np = wb->s_count | SRWLOCK_SHARED;

    }

    }

    barrier();

    /*Also unlocks lock bit*/

    l->p = np;

    barrier();

    if (wb->ex)

    {

    barrier();

    /*Notify the next waiter*/

    wb->wake = (void *) 1;

    barrier();

    return;

    }

    /*We now need to wake all others required.*/

    for (wake = wb->wake; wake; wake = wake_next)

    {

    barrier();

    wake_next = wake->next;

    barrier();

    wake->spin = 1;

    barrier();

    }

    }

    static int srwlock_wrtrylock(srwlock *s)

    {

    /*No other readers or writers?*/

    if (!s->p && (cmpxchg(&s->p, 0, SRWLOCK_USERS) == 0)) return 0;

    return EBUSY;

    }

    展开全文
  • 自己实现读写锁

    2019-11-04 17:57:31
    } } } 自己实现读写锁 读写锁实现 package ReadWriteLock.Sample; public final class ReadWriteLock { private int readingReaders = 0; // private int waitingWriters = 0; // private int writingWriters = 0...

    定义:能够允许多个读操作或者一个写操作,两者不能同时进行

    使用

    package net.jcip.examples;
    
    import java.util.*;
    import java.util.concurrent.locks.*;
    
    /**
     * ReadWriteMap
     * <p/>
     * Wrapping a Map with a read-write lock
     *
     * @author Brian Goetz and Tim Peierls
     */
    public class ReadWriteMap <K,V> {
        private final Map<K, V> map;
        private final ReadWriteLock lock = new ReentrantReadWriteLock();
        private final Lock r = lock.readLock();
        private final Lock w = lock.writeLock();
    
        public ReadWriteMap(Map<K, V> map) {
            this.map = map;
        }
    
        public V put(K key, V value) {
            w.lock();
            try {
                return map.put(key, value);
            } finally {
                w.unlock();
            }
        }
    
        public V remove(Object key) {
            w.lock();
            try {
                return map.remove(key);
            } finally {
                w.unlock();
            }
        }
    
        public void putAll(Map<? extends K, ? extends V> m) {
            w.lock();
            try {
                map.putAll(m);
            } finally {
                w.unlock();
            }
        }
    
        public void clear() {
            w.lock();
            try {
                map.clear();
            } finally {
                w.unlock();
            }
        }
    
        public V get(Object key) {
            r.lock();
            try {
                return map.get(key);
            } finally {
                r.unlock();
            }
        }
    
        public int size() {
            r.lock();
            try {
                return map.size();
            } finally {
                r.unlock();
            }
        }
    
        public boolean isEmpty() {
            r.lock();
            try {
                return map.isEmpty();
            } finally {
                r.unlock();
            }
        }
    
        public boolean containsKey(Object key) {
            r.lock();
            try {
                return map.containsKey(key);
            } finally {
                r.unlock();
            }
        }
    
        public boolean containsValue(Object value) {
            r.lock();
            try {
                return map.containsValue(value);
            } finally {
                r.unlock();
            }
        }
    }
    
    

    自己实现的读写锁

    读写锁实现

    package ReadWriteLock.Sample;
    
    public final class ReadWriteLock {
        private int readingReaders = 0; // 
        private int waitingWriters = 0; // 
        private int writingWriters = 0; // 
        private boolean preferWriter = true; // 
    
        public synchronized void readLock() throws InterruptedException {
            while (writingWriters > 0 || (preferWriter && waitingWriters > 0)) {
                wait();
            }
            readingReaders++;                       //  
        }
    
        public synchronized void readUnlock() {
            readingReaders--;                       //  
            preferWriter = true;
            notifyAll();
        }
    
        public synchronized void writeLock() throws InterruptedException {
            waitingWriters++;                       // 
            try {
                while (readingReaders > 0 || writingWriters > 0) {
                    wait();
                }
            } finally {
              waitingWriters--;                   // 
            }
            writingWriters++;                       //  
        }
    
        public synchronized void writeUnlock() {
            writingWriters--;                       // 
            preferWriter = false;
            notifyAll();
        }
    }
    
    

    使用了读写锁保护的数据

    package ReadWriteLock.Sample;
    
    public class Data {
        private final char[] buffer;
        private final ReadWriteLock lock = new ReadWriteLock();
        public Data(int size) {
            this.buffer = new char[size];
            for (int i = 0; i < buffer.length; i++) {
                buffer[i] = '*';
            }
        }
        public char[] read() throws InterruptedException {
            lock.readLock();
            try {
                return doRead();
            } finally {
                lock.readUnlock();
            }
        }
        public void write(char c) throws InterruptedException {
            lock.writeLock();
            try {
                doWrite(c);
            } finally {
                lock.writeUnlock();
            }
        }
        private char[] doRead() {
            char[] newbuf = new char[buffer.length];
            for (int i = 0; i < buffer.length; i++) {
                newbuf[i] = buffer[i];
            }
            slowly();
            return newbuf;
        }
        private void doWrite(char c) {
            for (int i = 0; i < buffer.length; i++) {
                buffer[i] = c;
                slowly();
            }
        }
        private void slowly() {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
            }
        }
    }
    
    

    读线程

    package ReadWriteLock.Sample;
    
    public class ReaderThread extends Thread {
        private final Data data;
        public ReaderThread(Data data) {
            this.data = data;
        }
        public void run() {
            try {
                while (true) {
                    char[] readbuf = data.read();
                    System.out.println(Thread.currentThread().getName() + " reads " + String.valueOf(readbuf));
                }
            } catch (InterruptedException e) {
            }
        }
    }
    
    

    写线程

    package ReadWriteLock.Sample;
    
    import java.util.Random;
    
    public class WriterThread extends Thread {
        private static final Random random = new Random();
        private final Data data;
        private final String filler;
        private int index = 0;
        public WriterThread(Data data, String filler) {
            this.data = data;
            this.filler = filler;
        }
        public void run() {
            try {
                while (true) {
                    char c = nextchar();
                    data.write(c);
                    Thread.sleep(random.nextInt(3000));
                }
            } catch (InterruptedException e) {
            }
        }
        private char nextchar() {
            char c = filler.charAt(index);
            index++;
            if (index >= filler.length()) {
                index = 0;
            }
            return c;
        }
    }
    
    

    调用

    package ReadWriteLock.Sample;
    
    public class Main {
        public static void main(String[] args) {
            Data data = new Data(10);
            new ReaderThread(data).start();
            new ReaderThread(data).start();
            new ReaderThread(data).start();
            new ReaderThread(data).start();
            new ReaderThread(data).start();
            new ReaderThread(data).start();
            new WriterThread(data, "ABCDEFGHIJKLMNOPQRSTUVWXYZ").start();
            new WriterThread(data, "abcdefghijklmnopqrstuvwxyz").start();
        }
    }
    
    

    使用了的结果

    Thread-0 reads **********
    Thread-4 reads **********
    Thread-5 reads **********
    Thread-3 reads **********
    Thread-2 reads **********
    Thread-1 reads **********
    Thread-0 reads AAAAAAAAAA
    Thread-4 reads AAAAAAAAAA
    Thread-5 reads AAAAAAAAAA
    Thread-2 reads AAAAAAAAAA
    Thread-3 reads AAAAAAAAAA
    Thread-1 reads AAAAAAAAAA
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-2 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-2 reads bbbbbbbbbb
    Thread-0 reads bbbbbbbbbb
    Thread-5 reads bbbbbbbbbb
    Thread-3 reads bbbbbbbbbb
    Thread-1 reads bbbbbbbbbb
    Thread-4 reads bbbbbbbbbb
    Thread-5 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-2 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-4 reads eeeeeeeeee
    Thread-0 reads eeeeeeeeee
    Thread-1 reads eeeeeeeeee
    Thread-2 reads eeeeeeeeee
    Thread-3 reads eeeeeeeeee
    Thread-5 reads eeeeeeeeee
    Thread-3 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-0 reads ffffffffff
    Thread-4 reads ffffffffff
    Thread-3 reads ffffffffff
    Thread-5 reads ffffffffff
    Thread-1 reads ffffffffff
    Thread-2 reads ffffffffff
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-5 reads GGGGGGGGGG
    Thread-1 reads GGGGGGGGGG
    Thread-2 reads GGGGGGGGGG
    Thread-3 reads GGGGGGGGGG
    Thread-4 reads GGGGGGGGGG
    Thread-0 reads GGGGGGGGGG
    Thread-0 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-0 reads HHHHHHHHHH
    Thread-2 reads HHHHHHHHHH
    Thread-4 reads HHHHHHHHHH
    Thread-1 reads HHHHHHHHHH
    Thread-5 reads HHHHHHHHHH
    Thread-3 reads HHHHHHHHHH
    Thread-1 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-3 reads iiiiiiiiii
    Thread-2 reads iiiiiiiiii
    Thread-1 reads iiiiiiiiii
    Thread-5 reads iiiiiiiiii
    Thread-0 reads iiiiiiiiii
    Thread-4 reads iiiiiiiiii
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-0 reads JJJJJJJJJJ
    Thread-2 reads JJJJJJJJJJ
    Thread-5 reads JJJJJJJJJJ
    Thread-3 reads JJJJJJJJJJ
    Thread-1 reads JJJJJJJJJJ
    Thread-4 reads JJJJJJJJJJ
    Thread-2 reads jjjjjjjjjj
    Thread-0 reads jjjjjjjjjj
    Thread-5 reads jjjjjjjjjj
    Thread-3 reads jjjjjjjjjj
    Thread-4 reads jjjjjjjjjj
    Thread-1 reads jjjjjjjjjj
    Thread-3 reads jjjjjjjjjj
    Thread-5 reads jjjjjjjjjj
    Thread-2 reads jjjjjjjjjj
    Thread-0 reads jjjjjjjjjj
    Thread-4 reads jjjjjjjjjj
    Thread-1 reads jjjjjjjjjj
    Thread-0 reads jjjjjjjjjj
    Thread-5 reads jjjjjjjjjj
    Thread-2 reads jjjjjjjjjj
    Thread-3 reads jjjjjjjjjj
    Thread-1 reads jjjjjjjjjj
    Thread-4 reads jjjjjjjjjj
    Thread-0 reads jjjjjjjjjj
    Thread-2 reads jjjjjjjjjj
    Thread-5 reads jjjjjjjjjj
    Thread-1 reads jjjjjjjjjj
    Thread-4 reads jjjjjjjjjj
    Thread-3 reads jjjjjjjjjj
    Thread-0 reads jjjjjjjjjj
    Thread-2 reads jjjjjjjjjj
    Thread-5 reads jjjjjjjjjj
    Thread-4 reads jjjjjjjjjj
    Thread-1 reads jjjjjjjjjj
    Thread-3 reads jjjjjjjjjj
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-4 reads KKKKKKKKKK
    Thread-3 reads KKKKKKKKKK
    Thread-1 reads KKKKKKKKKK
    Thread-2 reads KKKKKKKKKK
    Thread-5 reads KKKKKKKKKK
    Thread-0 reads KKKKKKKKKK
    Thread-1 reads llllllllll
    Thread-2 reads llllllllll
    Thread-0 reads llllllllll
    Thread-3 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-0 reads llllllllll
    Thread-3 reads llllllllll
    Thread-1 reads llllllllll
    Thread-2 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-0 reads llllllllll
    Thread-1 reads llllllllll
    Thread-2 reads llllllllll
    Thread-3 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-0 reads llllllllll
    Thread-2 reads llllllllll
    Thread-1 reads llllllllll
    Thread-3 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-0 reads llllllllll
    Thread-3 reads llllllllll
    Thread-1 reads llllllllll
    Thread-2 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-0 reads llllllllll
    Thread-2 reads llllllllll
    Thread-1 reads llllllllll
    Thread-3 reads llllllllll
    Thread-4 reads llllllllll
    Thread-5 reads llllllllll
    Thread-5 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-4 reads MMMMMMMMMM
    Thread-2 reads MMMMMMMMMM
    Thread-1 reads MMMMMMMMMM
    Thread-3 reads MMMMMMMMMM
    Thread-0 reads MMMMMMMMMM
    Thread-5 reads MMMMMMMMMM
    Thread-3 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-1 reads NNNNNNNNNN
    Thread-4 reads NNNNNNNNNN
    Thread-0 reads NNNNNNNNNN
    Thread-5 reads NNNNNNNNNN
    Thread-3 reads NNNNNNNNNN
    Thread-2 reads NNNNNNNNNN
    Thread-0 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-0 reads mmmmmmmmmm
    Thread-3 reads mmmmmmmmmm
    Thread-4 reads mmmmmmmmmm
    Thread-1 reads mmmmmmmmmm
    Thread-5 reads mmmmmmmmmm
    Thread-2 reads mmmmmmmmmm
    Thread-0 reads nnnnnnnnnn
    Thread-3 reads nnnnnnnnnn
    Thread-4 reads nnnnnnnnnn
    Thread-1 reads nnnnnnnnnn
    Thread-2 reads nnnnnnnnnn
    Thread-5 reads nnnnnnnnnn
    Thread-5 reads nnnnnnnnnn
    Thread-0 reads nnnnnnnnnn
    Thread-1 reads nnnnnnnnnn
    Thread-2 reads nnnnnnnnnn
    Thread-4 reads nnnnnnnnnn
    Thread-3 reads nnnnnnnnnn
    Thread-3 reads nnnnnnnnnn
    Thread-4 reads nnnnnnnnnn
    Thread-5 reads nnnnnnnnnn
    Thread-2 reads nnnnnnnnnn
    Thread-1 reads nnnnnnnnnn
    Thread-0 reads nnnnnnnnnn
    Thread-3 reads nnnnnnnnnn
    Thread-4 reads nnnnnnnnnn
    Thread-5 reads nnnnnnnnnn
    Thread-2 reads nnnnnnnnnn
    Thread-1 reads nnnnnnnnnn
    Thread-0 reads nnnnnnnnnn
    Thread-4 reads nnnnnnnnnn
    Thread-3 reads nnnnnnnnnn
    Thread-2 reads nnnnnnnnnn
    Thread-5 reads nnnnnnnnnn
    Thread-0 reads nnnnnnnnnn
    Thread-1 reads nnnnnnnnnn
    Thread-5 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-2 reads OOOOOOOOOO
    Thread-4 reads OOOOOOOOOO
    Thread-1 reads OOOOOOOOOO
    Thread-0 reads OOOOOOOOOO
    Thread-3 reads OOOOOOOOOO
    Thread-5 reads OOOOOOOOOO
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-1 reads oooooooooo
    Thread-4 reads oooooooooo
    Thread-5 reads oooooooooo
    Thread-2 reads oooooooooo
    Thread-3 reads oooooooooo
    Thread-0 reads oooooooooo
    Thread-4 reads PPPPPPPPPP
    Thread-3 reads PPPPPPPPPP
    Thread-5 reads PPPPPPPPPP
    Thread-0 reads PPPPPPPPPP
    Thread-2 reads PPPPPPPPPP
    Thread-1 reads PPPPPPPPPP
    
    

    去掉读写锁

    package ReadWriteLock.Sample;
    
    public class Data {
        private final char[] buffer;
    //    private final ReadWriteLock lock = new ReadWriteLock();
        public Data(int size) {
            this.buffer = new char[size];
            for (int i = 0; i < buffer.length; i++) {
                buffer[i] = '*';
            }
        }
        public char[] read() throws InterruptedException {
    //        lock.readLock();
            try {
                return doRead();
            } finally {
    //            lock.readUnlock();
            }
        }
        public void write(char c) throws InterruptedException {
    //        lock.writeLock();
            try {
                doWrite(c);
            } finally {
    //            lock.writeUnlock();
            }
        }
        private char[] doRead() {
            char[] newbuf = new char[buffer.length];
            for (int i = 0; i < buffer.length; i++) {
                newbuf[i] = buffer[i];
            }
            slowly();
            return newbuf;
        }
        private void doWrite(char c) {
            for (int i = 0; i < buffer.length; i++) {
                buffer[i] = c;
                slowly();
            }
        }
        private void slowly() {
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
            }
        }
    }
    
    

    没有使用的结果

    Thread-5 reads **********
    Thread-4 reads **********
    Thread-3 reads **********
    Thread-2 reads **********
    Thread-1 reads **********
    Thread-0 reads **********
    Thread-0 reads a*********
    Thread-2 reads a*********
    Thread-1 reads a*********
    Thread-3 reads a*********
    Thread-4 reads a*********
    Thread-5 reads a*********
    Thread-4 reads aAa*******
    Thread-3 reads aAa*******
    Thread-5 reads aAa*******
    Thread-0 reads aAa*******
    Thread-1 reads aAa*******
    Thread-2 reads aAa*******
    Thread-3 reads aAa*******
    Thread-5 reads aAa*******
    Thread-4 reads aAa*******
    Thread-0 reads aAa*******
    Thread-1 reads aAa*******
    Thread-2 reads aAa*******
    Thread-3 reads aAaA******
    Thread-5 reads aAaA******
    Thread-4 reads aAaA******
    Thread-0 reads aAaA******
    Thread-1 reads aAaA******
    Thread-2 reads aAaA******
    Thread-3 reads aAaAA*****
    Thread-2 reads aAaAAa****
    Thread-1 reads aAaAA*****
    Thread-0 reads aAaAA*****
    Thread-4 reads aAaAA*****
    Thread-5 reads aAaAA*****
    Thread-3 reads aAaAAa****
    Thread-2 reads aAaAAa****
    Thread-1 reads aAaAAaA***
    Thread-0 reads aAaAAaA***
    Thread-4 reads aAaAAaA***
    Thread-5 reads aAaAAaA***
    Thread-0 reads aAaAAaAA**
    Thread-2 reads aAaAAaA***
    Thread-1 reads aAaAAaAA**
    Thread-3 reads aAaAAaA***
    Thread-5 reads aAaAAaAA**
    Thread-4 reads aAaAAaAA**
    Thread-2 reads aAaAAaAAa*
    Thread-1 reads aAaAAaAAa*
    Thread-0 reads aAaAAaAAa*
    Thread-3 reads aAaAAaAAa*
    Thread-4 reads aAaAAaAAa*
    Thread-5 reads aAaAAaAAa*
    Thread-2 reads aAaAAaAAaa
    Thread-1 reads aAaAAaAAaa
    Thread-0 reads aAaAAaAAaa
    Thread-4 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaa
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads aAaAAaAAaA
    Thread-2 reads aAaAAaAAaA
    Thread-1 reads aAaAAaAAaA
    Thread-3 reads aAaAAaAAaA
    Thread-5 reads aAaAAaAAaA
    Thread-4 reads aAaAAaAAaA
    Thread-0 reads bAaAAaAAaA
    Thread-2 reads bAaAAaAAaA
    Thread-1 reads bAaAAaAAaA
    Thread-3 reads bAaAAaAAaA
    Thread-5 reads bAaAAaAAaA
    Thread-4 reads bAaAAaAAaA
    Thread-0 reads bbaAAaAAaA
    Thread-2 reads bbaAAaAAaA
    Thread-1 reads bbaAAaAAaA
    Thread-3 reads bbaAAaAAaA
    Thread-5 reads bbaAAaAAaA
    Thread-4 reads bbaAAaAAaA
    Thread-0 reads bbbAAaAAaA
    Thread-2 reads bbbAAaAAaA
    Thread-1 reads bbbAAaAAaA
    Thread-3 reads bbbAAaAAaA
    Thread-5 reads bbbAAaAAaA
    Thread-4 reads bbbAAaAAaA
    Thread-0 reads bbbbAaAAaA
    Thread-2 reads bbbbAaAAaA
    Thread-3 reads bbbbAaAAaA
    Thread-1 reads bbbbAaAAaA
    Thread-5 reads bbbbAaAAaA
    Thread-4 reads bbbbAaAAaA
    Thread-0 reads bbbbbaAAaA
    Thread-2 reads bbbbbaAAaA
    Thread-1 reads bbbbbaAAaA
    Thread-3 reads bbbbbaAAaA
    Thread-5 reads bbbbbaAAaA
    Thread-4 reads bbbbbaAAaA
    Thread-0 reads bbbbbbAAaA
    Thread-2 reads bbbbbbAAaA
    Thread-1 reads bbbbbbAAaA
    Thread-3 reads bbbbbbAAaA
    Thread-5 reads bbbbbbAAaA
    Thread-4 reads bbbbbbAAaA
    Thread-0 reads bbbbbbbAaA
    Thread-2 reads bbbbbbbAaA
    Thread-1 reads bbbbbbbAaA
    Thread-3 reads bbbbbbbAaA
    Thread-5 reads bbbbbbbAaA
    Thread-4 reads bbbbbbbAaA
    Thread-0 reads BbbbbbbbaA
    Thread-2 reads BbbbbbbbaA
    Thread-1 reads BbbbbbbbaA
    Thread-3 reads BbbbbbbbaA
    Thread-5 reads BbbbbbbbaA
    Thread-4 reads BbbbbbbbaA
    Thread-0 reads BBbbbbbbbA
    Thread-2 reads BBbbbbbbbA
    Thread-1 reads BBbbbbbbbA
    Thread-3 reads BBbbbbbbbA
    Thread-5 reads BBbbbbbbbA
    Thread-4 reads BBbbbbbbbA
    Thread-0 reads BBBbbbbbbb
    Thread-2 reads BBBbbbbbbb
    Thread-3 reads BBBbbbbbbb
    Thread-1 reads BBBbbbbbbb
    Thread-5 reads BBBbbbbbbb
    Thread-4 reads BBBbbbbbbb
    Thread-0 reads BBBBbbbbbb
    Thread-2 reads BBBBbbbbbb
    Thread-5 reads BBBBbbbbbb
    Thread-1 reads BBBBbbbbbb
    Thread-3 reads BBBBbbbbbb
    Thread-4 reads BBBBbbbbbb
    Thread-0 reads BBBBBbbbbb
    Thread-2 reads BBBBBbbbbb
    Thread-5 reads BBBBBbbbbb
    Thread-1 reads BBBBBbbbbb
    Thread-3 reads BBBBBbbbbb
    Thread-4 reads BBBBBbbbbb
    Thread-0 reads BBBBBBbbbb
    Thread-2 reads BBBBBBbbbb
    Thread-5 reads BBBBBBbbbb
    Thread-1 reads BBBBBBbbbb
    Thread-3 reads BBBBBBbbbb
    Thread-4 reads BBBBBBbbbb
    Thread-0 reads BBBBBBBbbb
    Thread-2 reads BBBBBBBbbb
    Thread-5 reads BBBBBBBbbb
    Thread-1 reads BBBBBBBbbb
    Thread-3 reads BBBBBBBbbb
    Thread-4 reads BBBBBBBbbb
    Thread-0 reads BBBBBBBBbb
    Thread-2 reads BBBBBBBBbb
    Thread-5 reads BBBBBBBBbb
    Thread-3 reads BBBBBBBBbb
    Thread-1 reads BBBBBBBBbb
    Thread-4 reads BBBBBBBBbb
    Thread-0 reads BBBBBBBBBb
    Thread-2 reads BBBBBBBBBb
    Thread-5 reads BBBBBBBBBb
    Thread-3 reads BBBBBBBBBb
    Thread-1 reads BBBBBBBBBb
    Thread-4 reads BBBBBBBBBb
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads BBBBBBBBBB
    Thread-5 reads BBBBBBBBBB
    Thread-1 reads BBBBBBBBBB
    Thread-2 reads BBBBBBBBBB
    Thread-3 reads BBBBBBBBBB
    Thread-4 reads BBBBBBBBBB
    Thread-0 reads CBBBBBBBBB
    Thread-1 reads CBBBBBBBBB
    Thread-5 reads CBBBBBBBBB
    Thread-2 reads CBBBBBBBBB
    Thread-4 reads CBBBBBBBBB
    Thread-3 reads CBBBBBBBBB
    Thread-0 reads CCBBBBBBBB
    Thread-5 reads CCBBBBBBBB
    Thread-1 reads CCBBBBBBBB
    Thread-2 reads CCBBBBBBBB
    Thread-4 reads CCBBBBBBBB
    Thread-3 reads CCBBBBBBBB
    Thread-0 reads CCCBBBBBBB
    Thread-5 reads CCCBBBBBBB
    Thread-1 reads CCCBBBBBBB
    Thread-2 reads CCCBBBBBBB
    Thread-4 reads CCCBBBBBBB
    Thread-3 reads CCCBBBBBBB
    Thread-0 reads CCCCBBBBBB
    Thread-1 reads CCCCBBBBBB
    Thread-5 reads CCCCBBBBBB
    Thread-2 reads CCCCBBBBBB
    Thread-4 reads CCCCBBBBBB
    Thread-3 reads CCCCBBBBBB
    Thread-0 reads CCCCCBBBBB
    Thread-1 reads CCCCCBBBBB
    Thread-5 reads CCCCCBBBBB
    Thread-2 reads CCCCCBBBBB
    Thread-3 reads CCCCCBBBBB
    Thread-4 reads CCCCCBBBBB
    Thread-0 reads CCCCCCBBBB
    Thread-1 reads CCCCCCBBBB
    Thread-5 reads CCCCCCBBBB
    Thread-2 reads CCCCCCBBBB
    Thread-4 reads CCCCCCBBBB
    Thread-3 reads CCCCCCBBBB
    Thread-0 reads CCCCCCCBBB
    Thread-1 reads CCCCCCCBBB
    Thread-5 reads CCCCCCCBBB
    Thread-2 reads CCCCCCCBBB
    Thread-4 reads CCCCCCCBBB
    Thread-3 reads CCCCCCCBBB
    Thread-0 reads CCCCCCCCBB
    Thread-1 reads CCCCCCCCBB
    Thread-2 reads CCCCCCCCBB
    Thread-5 reads CCCCCCCCBB
    Thread-4 reads CCCCCCCCBB
    Thread-3 reads CCCCCCCCBB
    Thread-0 reads CCCCCCCCCB
    Thread-2 reads CCCCCCCCCB
    Thread-1 reads CCCCCCCCCB
    Thread-5 reads CCCCCCCCCB
    Thread-4 reads CCCCCCCCCB
    Thread-3 reads CCCCCCCCCB
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads CCCCCCCCCC
    Thread-2 reads CCCCCCCCCC
    Thread-5 reads CCCCCCCCCC
    Thread-1 reads CCCCCCCCCC
    Thread-4 reads CCCCCCCCCC
    Thread-3 reads CCCCCCCCCC
    Thread-0 reads cCCCCCCCCC
    Thread-2 reads cCCCCCCCCC
    Thread-1 reads cCCCCCCCCC
    Thread-5 reads cCCCCCCCCC
    Thread-4 reads cCCCCCCCCC
    Thread-3 reads cCCCCCCCCC
    Thread-0 reads ccCCCCCCCC
    Thread-2 reads ccCCCCCCCC
    Thread-1 reads ccCCCCCCCC
    Thread-5 reads ccCCCCCCCC
    Thread-4 reads ccCCCCCCCC
    Thread-3 reads ccCCCCCCCC
    Thread-0 reads cccCCCCCCC
    Thread-2 reads cccCCCCCCC
    Thread-1 reads cccCCCCCCC
    Thread-5 reads cccCCCCCCC
    Thread-4 reads cccCCCCCCC
    Thread-3 reads cccCCCCCCC
    Thread-0 reads ccccCCCCCC
    Thread-2 reads ccccCCCCCC
    Thread-5 reads ccccCCCCCC
    Thread-1 reads ccccCCCCCC
    Thread-4 reads ccccCCCCCC
    Thread-3 reads ccccCCCCCC
    Thread-0 reads cccccCCCCC
    Thread-2 reads cccccCCCCC
    Thread-5 reads cccccCCCCC
    Thread-1 reads cccccCCCCC
    Thread-4 reads cccccCCCCC
    Thread-3 reads cccccCCCCC
    Thread-0 reads ccccccCCCC
    Thread-2 reads ccccccCCCC
    Thread-5 reads ccccccCCCC
    Thread-1 reads ccccccCCCC
    Thread-4 reads ccccccCCCC
    Thread-3 reads ccccccCCCC
    Thread-0 reads cccccccCCC
    Thread-2 reads cccccccCCC
    Thread-5 reads cccccccCCC
    Thread-1 reads cccccccCCC
    Thread-4 reads cccccccCCC
    Thread-3 reads cccccccCCC
    Thread-0 reads ccccccccCC
    Thread-2 reads ccccccccCC
    Thread-5 reads ccccccccCC
    Thread-1 reads ccccccccCC
    Thread-4 reads ccccccccCC
    Thread-3 reads ccccccccCC
    Thread-0 reads cccccccccC
    Thread-2 reads cccccccccC
    Thread-5 reads cccccccccC
    Thread-4 reads cccccccccC
    Thread-1 reads cccccccccC
    Thread-3 reads cccccccccC
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads cccccccccc
    Thread-0 reads cccccccccc
    Thread-2 reads cccccccccc
    Thread-5 reads cccccccccc
    Thread-4 reads cccccccccc
    Thread-1 reads cccccccccc
    Thread-3 reads Dccccccccc
    Thread-0 reads Dccccccccc
    Thread-5 reads Dccccccccc
    Thread-2 reads Dccccccccc
    Thread-1 reads Dccccccccc
    Thread-4 reads Dccccccccc
    Thread-3 reads DDcccccccc
    Thread-0 reads DDcccccccc
    Thread-2 reads DDcccccccc
    Thread-5 reads DDcccccccc
    Thread-1 reads DDcccccccc
    Thread-4 reads DDcccccccc
    Thread-3 reads DDDccccccc
    Thread-0 reads DDDccccccc
    Thread-5 reads DDDccccccc
    Thread-2 reads DDDccccccc
    Thread-4 reads DDDccccccc
    Thread-1 reads DDDccccccc
    Thread-3 reads DDDDcccccc
    Thread-0 reads DDDDcccccc
    Thread-4 reads DDDDcccccc
    Thread-5 reads DDDDcccccc
    Thread-2 reads DDDDcccccc
    Thread-1 reads DDDDcccccc
    Thread-3 reads DDDDDccccc
    Thread-0 reads DDDDDccccc
    Thread-4 reads DDDDDccccc
    Thread-2 reads DDDDDccccc
    Thread-5 reads DDDDDccccc
    Thread-3 reads DDDDDDcccc
    Thread-1 reads DDDDDDcccc
    Thread-0 reads DDDDDDcccc
    Thread-4 reads DDDDDDcccc
    Thread-3 reads DDDDDDDccc
    Thread-5 reads DDDDDDcccc
    Thread-2 reads DDDDDDcccc
    Thread-1 reads DDDDDDDccc
    Thread-0 reads DDDDDDDccc
    Thread-4 reads DDDDDDDccc
    Thread-2 reads DDDDDDDDcc
    Thread-5 reads DDDDDDDDcc
    Thread-3 reads DDDDDDDccc
    Thread-1 reads DDDDDDDDcc
    Thread-0 reads DDDDDDDDcc
    Thread-4 reads DDDDDDDDcc
    Thread-3 reads DDDDDDDDDc
    Thread-2 reads DDDDDDDDcc
    Thread-5 reads DDDDDDDDcc
    Thread-1 reads DDDDDDDDDc
    Thread-0 reads DDDDDDDDDc
    Thread-4 reads DDDDDDDDDc
    Thread-3 reads DDDDDDDDDc
    Thread-2 reads DDDDDDDDDD
    Thread-5 reads DDDDDDDDDD
    Thread-1 reads DDDDDDDDDD
    Thread-0 reads DDDDDDDDDD
    Thread-4 reads DDDDDDDDDD
    Thread-3 reads DDDDDDDDDD
    Thread-2 reads DDDDDDDDDD
    Thread-5 reads DDDDDDDDDD
    Thread-1 reads DDDDDDDDDD
    Thread-0 reads dDDDDDDDDD
    Thread-4 reads dDDDDDDDDD
    Thread-3 reads dDDDDDDDDD
    Thread-2 reads dDDDDDDDDD
    Thread-5 reads dDDDDDDDDD
    Thread-1 reads dDDDDDDDDD
    Thread-0 reads ddDDDDDDDD
    Thread-4 reads ddDDDDDDDD
    Thread-3 reads ddDDDDDDDD
    Thread-5 reads ddDDDDDDDD
    Thread-2 reads ddDDDDDDDD
    Thread-1 reads ddDDDDDDDD
    Thread-0 reads dddDDDDDDD
    Thread-4 reads dddDDDDDDD
    Thread-2 reads dddDDDDDDD
    Thread-3 reads dddDDDDDDD
    Thread-5 reads dddDDDDDDD
    Thread-1 reads dddDDDDDDD
    Thread-0 reads ddddDDDDDD
    Thread-4 reads ddddDDDDDD
    Thread-2 reads ddddDDDDDD
    Thread-5 reads ddddDDDDDD
    Thread-3 reads ddddDDDDDD
    Thread-1 reads ddddDDDDDD
    Thread-0 reads dddddDDDDD
    Thread-4 reads dddddDDDDD
    Thread-5 reads dddddDDDDD
    Thread-2 reads dddddDDDDD
    Thread-3 reads dddddDDDDD
    Thread-1 reads dddddDDDDD
    Thread-0 reads ddddddDDDD
    Thread-4 reads ddddddDDDD
    Thread-2 reads ddddddDDDD
    Thread-5 reads ddddddDDDD
    Thread-3 reads ddddddDDDD
    Thread-1 reads ddddddDDDD
    Thread-0 reads dddddddDDD
    Thread-4 reads dddddddDDD
    Thread-5 reads dddddddDDD
    Thread-2 reads dddddddDDD
    Thread-3 reads dddddddDDD
    Thread-1 reads dddddddDDD
    Thread-0 reads ddddddddDD
    Thread-4 reads ddddddddDD
    Thread-2 reads ddddddddDD
    Thread-5 reads ddddddddDD
    Thread-3 reads ddddddddDD
    Thread-1 reads ddddddddDD
    Thread-0 reads dddddddddD
    Thread-4 reads dddddddddD
    Thread-5 reads dddddddddD
    Thread-2 reads dddddddddD
    Thread-3 reads dddddddddD
    Thread-1 reads dddddddddD
    Thread-0 reads dddddddddd
    Thread-4 reads dddddddddd
    Thread-2 reads dddddddddd
    Thread-5 reads dddddddddd
    Thread-3 reads dddddddddd
    
    

    复制链接,在浏览器打开
    tomcat源码解析
    https://study.163.com/course/introduction/1209535854.htm

    Springmvc源码解析
    https://study.163.com/course/introduction/1209536851.htm

    dubbo源码解析
    https://study.163.com/course/introduction/1209648816.htm

    源码悟道tomcat+springmvc解析
    https://study.163.com/course/introduction/1209399899.htm

    学习视频

    在这里插入图片描述

    在这里插入图片描述

    展开全文
  • ios实现读写锁,AFN的实现

    千次阅读 2019-11-03 17:44:57
    读写锁场景: 同一时间,只能有1个线程进行写的操作 同一时间,允许有多个线程进行读的操作 同一时间,不允许既有写的操作,又有读的操作 上面的场景就是典型的“多读单写”,经常用于文件等数据的读写操作,...
  • 读写锁是线程读写同一文件所需要用到的,读写锁是什么东西在这里不做过多的解释,可以自己去百度或谷歌去搜一下。谨在此附上我自己写的缓存系统的简单实现,你从中也能悟出缓存实现的基本思想缓存里面有数据就从缓存...
  • 书接前文(自己动手实现自旋锁(spinlock)),本文将详细讲解自己动手实现读写锁(read-write lock)。 很多时候,我们的进程并不需要改变它所访问的数据结构,它们只是以只读的方式访问某一变量或结构某字段,此时...
  • 它的state为一个long型变量,状态的设计也不同于读写锁,且提供了三种模式来控制 read/write 的获取,并且内部实现自己的同步等待队列。1.1、StampedLock读写锁写锁:使用writeLock方法获取,当锁不可用时会阻塞,...
  • 自己实现一个简单的读写锁

    千次阅读 2017-11-14 14:19:10
    自己实现一个简单的读写锁
  • c++读写锁实现

    千次阅读 2019-03-26 10:37:37
    及C++11,提供的 unique_lock, 可以方便实现读写锁。 但上述的前提是,允许你使用C++17。在国内的开发环境下,别说C++17,连C++11用的也不多。 所以,大多数时候,我们需要自己实现一套C++读写锁(C++11环境下)。 ...
  • Win32 实现读写锁

    千次阅读 2009-03-04 12:55:00
    Win32中没有为Xp提供读写锁机制(只为Vista提供了), 由于工作需求,所以自己实现了一个简单的读写锁,具体实现如下:头文件:rwlocker.h#ifndef _RWLOCKER_H_#define _RWLOCKER_H_#include namespace Locker{ ...
  • 最近的诸多面试经历确实让自己发现内功还不够,还需要持续的学习精进。 实现如下: class RWLock{ private: int state; mutex mu; condition_variable cond; public: RWLock():state(0){} void rlock(){ ...
  • 读写锁实现

    2019-03-03 12:27:44
    读写锁主要用来解决读-读能共存,读-写不能共存,写-写不能共存的情况,它的使用场景主要是读写分离,比如自己实现一个缓存,在刷新缓存的时候就需要用到读写锁。下面撸上一段代码,简单实现以下。 /** * @author...
  • Redis实现分布式读写锁 前言 使用Jedis构建redis连接池,使用lua脚本命令保证redis的事务,以实现分布式的读写...由于项目中还自己另外维护着一个redis的连接池JedisPool,故决定自己实现分布式的可重入读写锁。 ...
  • 实现一个读写锁

    千次阅读 2018-05-25 18:56:00
    先来自己实现读写锁,之后再分析JUC包下的ReentrantReadWriteLock。 读写锁的规则:当有写操作正在运行,则读操作应该等待;当有读操作正在运行,写操作也要等待。读操作与读操作之间不会阻塞,也就是读读可以,写...
  • 既然读写并发操作,那么就涉及到操作互斥,这里自然想到了读写锁,也顺便对自己读写锁方面的知识做个梳理。为什么需要读写锁?与传统锁不同的是读写锁的规则是可以共享读,但只能一个写,总结起来为:读读不互斥,...
  • 读写锁是线程读写同一文件所需要用到的,读写锁是什么东西在这里不做过多的解释,可以自己去百度或谷歌去搜一下。 谨在此附上我自己写的缓存系统的简单实现,你从中也能悟出缓存实现的基本思想 缓存里面有数据就从...
  • 读写锁是线程读写同一文件所需要用到的,读写锁是什么东西在这里不做过多的解释,可以自己去百度或谷歌去搜一下。 谨在此附上我自己写的缓存系统的简单实现,你从中也能悟出缓存实现的基本思想 缓存里面有数据就从...
  • 当CPU的发展不在遵循摩尔定律,并逐渐迈向多核时代的时候,为了充分发挥多核CPU的性能...每种同步机制都有其特定的属性进而决定了它们不同的适用场合,本文将介绍如何借助互斥量和信号量自己实现一个读者优先的读写锁
  • 前面已经讲解了Zookeeper可重入实现原理,自己对分布式也有了更深的认知。 我在公众号中发了一个疑问,相比于Redis来说,Zookeeper的实现方式要更好一些,即便Redis作者实现了RedLock算法来解决Redis集群模式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 403
精华内容 161
关键字:

自己实现读写锁