日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java多线程 -- ReadWriteLock 读写锁

發(fā)布時(shí)間:2024/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java多线程 -- ReadWriteLock 读写锁 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫一條線程,讀多條線程能夠提升效率。

寫寫/讀寫 需要“互斥”;
讀讀 不需要互斥.

  • ReadWriteLock 維護(hù)了一對(duì)相關(guān)的鎖,一個(gè)用于只讀操作,另一個(gè)用于寫入操作。只要沒有 writer,讀取鎖可以由多個(gè) reader 線程同時(shí)保持。寫入鎖是獨(dú)占的。
  • ReadWriteLock 讀取操作通常不會(huì)改變共享資源,但執(zhí)行寫入操作時(shí),必須獨(dú)占方式來獲取鎖。對(duì)于讀取操作占多數(shù)的數(shù)據(jù)結(jié)構(gòu)。 ReadWriteLock 能提供比獨(dú)占鎖更高的并發(fā)性。而對(duì)于只讀的數(shù)據(jù)結(jié)構(gòu),其中包含的不變性可以完全不需要考慮加鎖操作。
  • api相關(guān)方法:

  • Lock readLock()返回用于讀取操作的鎖。
  • Lock writeLock()返回用于寫入操作的鎖。
  • ?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 读写锁的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。