新账号第一篇博客,今后将继续分享好东西。
下面是我学习后编写的读写锁实例,能帮助需要的朋友们更好,若有不正确指出,还望指出,共同学习进步,谢谢。
package com.gannalyo.thread;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* 读写锁Lock
*
* @author Gannalyo
*/
public class T11读写锁ReentrantReadWriteLock2 {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(8);
ReentrantReadWriteLockTest rwLockTest = new T11读写锁ReentrantReadWriteLock2().new ReentrantReadWriteLockTest();
for (int i = 0; i < 3; i++) {
executorService.execute(new Runnable() {
@Override
public void run() {
rwLockTest.get();
}
});
executorService.execute(new Runnable() {
@Override
public void run() {
rwLockTest.put(new Random().nextInt(10000));
}
});
}
executorService.shutdown();
}
class ReentrantReadWriteLockTest {
int data = 0;
private ReentrantReadWriteLock readWritelock = new ReentrantReadWriteLock();
public void get() {
try {
readWritelock.readLock().lock();
System.out.println(Thread.currentThread().getName() + " is ready to read ....");
Thread.sleep(new Random().nextInt(1000));
System.out.println(Thread.currentThread().getName() + " has read data " + data);
} catch (Exception e) {
e.printStackTrace();
} finally {
readWritelock.readLock().unlock();
}
}
public void put(int data) {
try {
readWritelock.writeLock().lock();
System.out.println(Thread.currentThread().getName() + " is ready to write ....");
Thread.sleep(new Random().nextInt(1000));
System.out.println(Thread.currentThread().getName() + " has written data " + data);
this.data = data;
} catch (Exception e) {
e.printStackTrace();
} finally {
readWritelock.writeLock().unlock();
}
}
}
}