java多线程 -- ReadWriteLock 读写锁
生活随笔
收集整理的這篇文章主要介紹了
java多线程 -- ReadWriteLock 读写锁
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
寫一條線程,讀多條線程能夠提升效率。
寫寫/讀寫 需要“互斥”;
讀讀 不需要互斥.
api相關(guān)方法:
?demo:
package com.company;import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;/** 1. ReadWriteLock : 讀寫鎖* * 寫寫/讀寫 需要“互斥”* 讀讀 不需要互斥* */ public class TestReadWriteLock {public static void main(String[] args) {ReadWriteLockDemo rw = new ReadWriteLockDemo();new Thread(() -> rw.set(new ReadWriteLockDemo.Person("soyoungboy", 27)), "Write:").start();for (int i = 0; i < 10; i++) {new Thread(() -> rw.get()).start();}}}class ReadWriteLockDemo {private Person person;private ReadWriteLock lock = new ReentrantReadWriteLock();//讀void get() {lock.readLock().lock(); //上鎖try {if (person != null) {System.out.println(Thread.currentThread().getName() + " ==> person : " + person.toString());}else {System.out.println(Thread.currentThread().getName() + "");}} finally {lock.readLock().unlock(); //釋放鎖 }}//寫void set(Person person) {lock.writeLock().lock();try {System.out.println(Thread.currentThread().getName());this.person = person;} finally {lock.writeLock().unlock();}}static class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}} }結(jié)果:
Thread-0 Thread-1 Thread-3 Thread-2 Write: Thread-4 ==> person : Person{name='soyoungboy', age=27} Thread-6 ==> person : Person{name='soyoungboy', age=27} Thread-8 ==> person : Person{name='soyoungboy', age=27} Thread-5 ==> person : Person{name='soyoungboy', age=27} Thread-7 ==> person : Person{name='soyoungboy', age=27} Thread-9 ==> person : Person{name='soyoungboy', age=27}?
總結(jié)
以上是生活随笔為你收集整理的java多线程 -- ReadWriteLock 读写锁的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web office apps 在线预览
- 下一篇: 在Map 3D显示管理器中更改当前地图的