溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ThreadLocal如何在Android中使用

發(fā)布時間:2021-04-08 16:29:15 來源:億速云 閱讀:169 作者:Leah 欄目:移動開發(fā)

這期內容當中小編將會給大家?guī)碛嘘PThreadLocal如何在Android中使用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

  ThreadLocal的使用在Looper類中得到很好的體現.保證了每個線程和一個Looper一一對應,并且每個Looper之間不受影響.  

示例代碼:

MainActivity如下:

package cc.cv; 
 
import android.os.Bundle; 
import android.app.Activity; 
/** 
 * Demo描述: 
 * ThreadLocal使用示例. 
 * 關于ThreadLocal的官方文檔描述 
 * Implements a thread-local storage, that is, a variable for which each thread has its own value. 
 * All threads share the same ThreadLocal object, but each sees a different value when accessing it, 
 * and changes made by one thread do not affect the other threads. 
 * The implementation supports null values. 
 * 該段文字描述了ThreadLocal的用途: 
 * 1 對于同一個變量(即ThreadLocal中保存的變量)對于不同的線程其值是不同的. 
 * 2 所有線程共享一個ThreadLocal對象,但是訪問ThreadLocal對象中的變量時得到不同的值 
 * 3 某個線程修改了ThreadLocal對象中的變量值時不會影響到其他線程. 
 * 
 * 
 * 舉個例子: 
 * 1 主線程中建立一個ThreadLocal對象(mThreadLocal) 
 * 2 在主線程中調用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量 
 * 3 在兩個子線程中調用mThreadLocal的set()方法向mThreadLocal中保存一個字符串變量 
 * 4 在主線程中調用mThreadLocal的get()方法獲取到mThreadLocal中為主線程保存字符串變量,發(fā)現其值未變. 
 * 
 * 
 * ThreadLocal的使用在Looper類中得到很好的體現.保證了每個線程和一個Looper一一對應,并且每個Looper之間不受影響. 
 * 
 */ 
public class MainActivity extends Activity { 
  private static ThreadLocal<String> mThreadLocal=new ThreadLocal<String>(); 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    testThreadLocal(); 
  } 
   
  private void testThreadLocal(){ 
    //在主線程中調用ThreadLocal的set()方法保存一個變量 
    mThreadLocal.set("haha"); 
    System.out.println("ThreadLocal保存的主線的變量值:"+mThreadLocal.get()); 
     
     
    new Thread(){ 
      public void run() { 
        //在第一個子線程中調用ThreadLocal的set()方法保存一個變量 
        mThreadLocal.set("xixi"); 
        System.out.println("ThreadLocal保存的第一個子線程的變量值:"+mThreadLocal.get()); 
      }; 
    }.start(); 
     
    new Thread(){ 
      public void run() { 
        //在第二個子線程中調用ThreadLocal的set()方法保存一個變量 
        mThreadLocal.set("heihei"); 
        System.out.println("ThreadLocal保存的第二個子線程的變量值:"+mThreadLocal.get()); 
      }; 
    }.start(); 
     
     
    try { 
      Thread.sleep(1000*2); 
      //驗證在第一個和第二個子線程對于ThreadLocal存儲的變量值的修改沒有影響到ThreadLocal存的主線程變量 
      System.out.println("ThreadLocal保存的主線的變量值:"+mThreadLocal.get()); 
    } catch (Exception e) { 
       
    } 
  } 
 
 
}

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:paddingBottom="@dimen/activity_vertical_margin" 
  android:paddingLeft="@dimen/activity_horizontal_margin" 
  android:paddingRight="@dimen/activity_horizontal_margin" 
  android:paddingTop="@dimen/activity_vertical_margin" 
  tools:context=".MainActivity" > 
 
  <TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/hello_world" /> 
 
</RelativeLayout>

上述就是小編為大家分享的ThreadLocal如何在Android中使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI