Sobes.tech
Middle

Kas ir ThreadLocal mainīgais?

sobes.tech AI

Atbilde no AI

ThreadLocal — tas klases, kas nodrošina iespēju glabāt datus, kas ir specifiski katram plūsmam. Izmantojot ThreadLocal, katra izmantojošā plūsma saņems savu kopiju mainīgajam, kas ir izolēta no citām plūsmām.

Galvenās īpašības un pielietojums:

  • Datu izolācija: Palīdz izvairīties no konkurences piekļuves problēmām kopīgajiem mainīgajiem dažādās plūsmās, jo katra plūsma darbojas ar savu kopiju.
  • Stāvokļa pārvaldība caur plūsmām: Noderīga, lai glabātu informāciju, kas saistīta ar pašreizējo pieprasījumu (piemēram, lietotāja ID, transakcijas konteksts) tīmekļa lietojumprogrammās vai daudzplūsmu pakalpojumos, bez tās tiešas nodošanas caur daudziem metožu izsaukumiem.
  • Iniciācija: ThreadLocal tiek inicializēts ar pirmo piekļuvi katrā plūsmā, izmantojot initialValue() metodi vai skaidri iestatot vērtību ar set().
  • Dzīves cikls: Dati, kas glabājas ThreadLocal, ir pieejami visa plūsmas dzīves laikā vai līdz tie tiek skaidri dzēsti ar remove() metodi.

Piemērs lietošanai:

// Izveidojam `ThreadLocal`, lai glabātu pašreizējās plūsmas nosaukumu
private static final ThreadLocal<String> threadName = new ThreadLocal<String>() {
    @Override
    protected String initialValue() {
        // Iniciējam vērtību ar pirmo piekļuvi
        return Thread.currentThread().getName();
    }
};

public void processRequest() {
    // Iestatām vērtību pašreizējai plūsmai
    threadName.set("RequestProcessor-" + Thread.currentThread().getId());

    // Iegūstam vērtību pašreizējai plūsmai
    String currentThreadName = threadName.get();
    System.out.println("Processing request in thread: " + currentThreadName);

    // Noņemam vērtību, lai izvairītos no atmiņas noplūdēm, īpaši plūsmas baseinos
    threadName.remove();
}

Svarīgi atcerēties, ka pēc lietošanas ir jāizsauc remove(), īpaši plūsmas baseinos, lai novērstu atmiņas noplūdes, jo plūsma var tikt atkārtoti izmantota, un vecā ThreadLocal vērtība paliks pievienota tai.