java8读写锁如何使用
1、读写锁的使用环境:
写写和读写需要“互斥”
读读不需要互斥

2、新建一个java类ReadWriteLockDemo
class ReadWriteLockDemo {
private int number = 0;
public void get() {
System.out.println(Thread.currentThread().getName() + ":" + number);
}
public void set(int number) {
System.out.println(Thread.currentThread().getName());
this.number = number;
}
}

3、使用ReadWriteLock控制线程安全
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();

4、使用读锁控制get()方法
public void get() {
readWriteLock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + ":" + number);
}finally {
readWriteLock.readLock().unlock();
}
}

5、使用写锁控制set()方法
public void set(int number) {
this.readWriteLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName());
this.number = number;
}finally {
this.readWriteLock.writeLock().unlock();
}
}

6、使用一个线程写数据,100个线程读数据
public static void main(String[] args) {
ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.set((int)(Math.random()*101));
}
},"Write:").start();
for(int i = 0;i< 100;i++) {
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.get();
}
},"Read:").start();
}
}
}

7、整体程序代码如下:
package com.gwolf;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class TestReadWriteLock {
public static void main(String[] args) {
ReadWriteLockDemo readWriteLockDemo = new ReadWriteLockDemo();
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.set((int)(Math.random()*101));
}
},"Write:").start();
for(int i = 0;i< 100;i++) {
new Thread(new Runnable() {
@Override
public void run() {
readWriteLockDemo.get();
}
},"Read:").start();
}
}
}
class ReadWriteLockDemo {
private int number = 0;
private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
public void get() {
readWriteLock.readLock().lock();
try {
System.out.println(Thread.currentThread().getName() + ":" + number);
}finally {
readWriteLock.readLock().unlock();
}
}
public void set(int number) {
this.readWriteLock.writeLock().lock();
try {
System.out.println(Thread.currentThread().getName());
this.number = number;
}finally {
this.readWriteLock.writeLock().unlock();
}
}
}
