欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java SoftReference類案例詳解

 更新時間:2021年08月23日 10:44:36   作者:大玩具  
這篇文章主要介紹了Java SoftReference類案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

軟引用簡介

軟引用是用來表示某個引用會被GC(垃圾處理器)收集的類。
當有引用指向某個obj的時候,通常發(fā)生GC的時候不會把這個對象處理掉,但是被軟引用包裝的對象,當應(yīng)用內(nèi)存將要被耗盡的時候-->即將發(fā)生OOM,垃圾處理器就會把它帶走。這么看來,軟應(yīng)用的生命周期還是很長的,可以用來做緩存處理。

我們可以通過以下方式來創(chuàng)建一個軟引用:

SoftReference<String> ref = new SoftReference<String>("Hello world");

接收數(shù)據(jù):

String value = ref.get();

if (value == null) {
  // 如果被GC回收了 在這里重新初始化
}
// 你的邏輯
...

軟引用用作緩存

創(chuàng)建一個SoftReferenceCache,內(nèi)部留個HashMap來保存內(nèi)容。

public class SoftReferenceCache<K, V> {
  
  private final HashMap<K, SoftReference<V>> mCache;

  public SoftReferenceCache() {
    mCache = new HashMap<K, SoftReference<V>>();
  }
}

再創(chuàng)建個往里面塞數(shù)據(jù)的方法。我們在put方法中創(chuàng)建了一個軟引用,value類型就是你在生成SoftReferenceCache時候創(chuàng)建的。

public void put(K key, V value) {
  mCache.put(key, new SoftReference<V>(value));
}

當然,還需要個get方法。

public V get(K key) {
  V value = null;

  SoftReference<V> reference = mCache.get(key);

  if (reference != null) {
    value = reference.get();
  }

  return value;
}

這個方法會判斷所要get的內(nèi)容的狀態(tài),在使用get方法的時候,還需要判斷返回是否為空,一方面可能本身就沒緩存這個對象,另一方面可能他被回收了。

示例

SoftReferenceCache<Integer, Person> mPersonCache = new SoftReferenceCache<Integer, Person>();

mPersonCache.put(0, new Person("Peter");
mPersonCache.put(1, new Person("Jan");
mPersonCahce.put(2, new Person("Kees");

// 去拿Jan
Person p = (Person) mPersonCache.get(1); 

完整代碼

import java.lang.ref.SoftReference;
import java.util.HashMap;

/**
 * SoftRefenceCache
 * @param <K> key的類型.
 * @param <V> value的類型.
 */
public class SoftReferenceCache<K, V> {
  private final HashMap<K, SoftReference<V>> mCache;

  public SoftReferenceCache() {
    mCache = new HashMap<K, SoftReference<V>>();
  }

  /**
   * 將對象放進緩存中,這個對象可以在GC發(fā)生時被回收
   * 
   * @param key key的值.
   * @param value value的值型.
   */

  public void put(K key, V value) {
    mCache.put(key, new SoftReference<V>(value));
  }

  /**
   * 從緩存中獲取value
   * 
   * @param key
   *
   * @return 如果找到的話返回value,如果被回收或者壓根兒沒有就返* 回null
   */
   
  public V get(K key) {
    V value = null;

    SoftReference<V> reference = mCache.get(key);

    if (reference != null) {
      value = reference.get();
    }

    return value;
  }
}

看國外大神blog有感并做修改。

到此這篇關(guān)于Java SoftReference類案例詳解的文章就介紹到這了,更多相關(guān)Java SoftReference類內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?MVC各種參數(shù)進行封裝的方法實例

    Spring?MVC各種參數(shù)進行封裝的方法實例

    這篇文章主要給大家介紹了關(guān)于Spring?MVC各種參數(shù)進行封裝的相關(guān)資料,SpringMVC內(nèi)置多種數(shù)據(jù)類型轉(zhuǎn)換器,可以根據(jù)請求中的參數(shù)與后端控制器方法的參數(shù)的關(guān)系為我們實現(xiàn)簡單的數(shù)據(jù)封裝,需要的朋友可以參考下
    2023-06-06
  • SpringBoot整合RabbitMQ實現(xiàn)消息確認機制

    SpringBoot整合RabbitMQ實現(xiàn)消息確認機制

    這篇文章主要介紹了SpringBoot整合RabbitMQ實現(xiàn)消息確認機制,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Spring Security Remember me使用及原理詳解

    Spring Security Remember me使用及原理詳解

    這篇文章主要介紹了Spring Security Remember me使用及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Spring集成Mybatis過程詳細講解

    Spring集成Mybatis過程詳細講解

    mybatis-plus是一個Mybatis的增強工具,在Mybatis的基礎(chǔ)上只做增強不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于SpringBoot整合Mybatis-plus案例及用法實例的相關(guān)資料,需要的朋友可以參考下
    2023-03-03
  • 詳解springboot-mysql-pagehelper分頁插件集成

    詳解springboot-mysql-pagehelper分頁插件集成

    這篇文章主要介紹了springboot-mysql-pagehelper分頁插件集成,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • java基礎(chǔ)之NIO介紹及使用

    java基礎(chǔ)之NIO介紹及使用

    這篇文章主要介紹了java基礎(chǔ)之NIO介紹及使用,文中有非常詳細的代碼示例,對正在學習java基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot集成Kafka的步驟

    SpringBoot集成Kafka的步驟

    這篇文章主要介紹了SpringBoot集成Kafka的步驟,幫助大家更好的理解和使用SpringBoot,感興趣的朋友可以了解下
    2021-01-01
  • OPENCV+JAVA實現(xiàn)人臉識別

    OPENCV+JAVA實現(xiàn)人臉識別

    這篇文章主要為大家詳細介紹了OPENCV+JAVA實現(xiàn)人臉識別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java substring方法實現(xiàn)原理解析

    Java substring方法實現(xiàn)原理解析

    這篇文章主要介紹了Java substring方法實現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • springboot自帶線程池ThreadPoolTaskExecutor使用

    springboot自帶線程池ThreadPoolTaskExecutor使用

    本文主要介紹了springboot自帶線程池ThreadPoolTaskExecutor使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04

最新評論