java8读写锁如何使用
1、读写锁的使用环境:写写和读写需要“互斥”读读不需要互斥
2、新建一个java类ReadWriteLockDemoclass 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(); } }}